https://www.cnblogs.com/msxh/p/10889484.html
https://cloud.tencent.com/developer/article/1429431
android.permission.INTERNET 默认打开的
android.permission.ACCESS_NETWORK_STATE 不打开
连续折腾3、4天,游戏安装到努比亚手机,结果刚启动就闪退。
最后解决的方法是:重置到出厂设置。
其中遇到一个导致崩溃的副产品:
public void PermissionRequest()
{
Debug.LogError("PermissionRequest Start");
string str = UnityEngine.SystemInfo.deviceUniqueIdentifier;
Debug.LogError("PermissionRequest End");
m_text.text += "hello" + str + "aaa";
bool INTERNET = Permission.HasUserAuthorizedPermission("android.permission.INTERNET");
bool ACCESS_NETWORK_STATE = Permission.HasUserAuthorizedPermission("android.permission.ACCESS_NETWORK_STATE");
bool ACCESS_WIFI_STATE = Permission.HasUserAuthorizedPermission("android.permission.ACCESS_WIFI_STATE");
bool WRITE_EXTERNAL_STORAGE = Permission.HasUserAuthorizedPermission("android.permission.WRITE_EXTERNAL_STORAGE");
bool READ_PHONE_STATE = Permission.HasUserAuthorizedPermission("android.permission.READ_PHONE_STATE");
bool VIBRATE = Permission.HasUserAuthorizedPermission("android.permission.VIBRATE");
bool GET_TASKS = Permission.HasUserAuthorizedPermission("android.permission.GET_TASKS");
bool RECORD_AUDIO = Permission.HasUserAuthorizedPermission("android.permission.RECORD_AUDIO");
string str2 = "\nINTERNET=" + INTERNET;
str2 += "\nACCESS_NETWORK_STATE=" + ACCESS_NETWORK_STATE;
str2 += "\nACCESS_WIFI_STATE=" + ACCESS_WIFI_STATE;
str2 += "\nWRITE_EXTERNAL_STORAGE=" + WRITE_EXTERNAL_STORAGE;
str2 += "\nREAD_PHONE_STATE=" + READ_PHONE_STATE;
str2 += "\nVIBRATE=" + VIBRATE;
str2 += "\nGET_TASKS=" + GET_TASKS;
str2 += "\nRECORD_AUDIO=" + RECORD_AUDIO;
m_text.text += str2;
//string[] m_devices = Microphone.devices; //自动打开麦克风确认申请
//m_text.text += m_devices.Length;
Permission.RequestUserPermissions(permissions); //弹出两个申请权限的对话框
//int graphicsDeviceID = UnityEngine.SystemInfo.graphicsDeviceID; //不会触发READ_PHONE_STATE
//string graphicsDeviceVersion = SystemInfo.graphicsDeviceVersion;
//m_text.text += "\n" + graphicsDeviceID + " " + graphicsDeviceVersion;
}
Permission.RequestUserPermissions(permissions);
反复申请权限,在努比亚上会先退出应用,然后再弹出权限申请框。
但是在游戏手机上则不会退出应用。
原先我是无脑的申请权限,其实应该先判断某个权限是否已经授权了,如果没有授权,再去申请。
此外,我还注意到,如果不去申请,但是当你使用到了某个权限,会动态的弹出权限申请框。
此外还得主要,在AndroidManifest.xml中一定要填写要申请的权限,否则,你即使动态申请了,也将申请不成功。
比如:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.perfectworld.cfgame"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false" android:usesCleartextTraffic="true">
<activity android:name="com.sdk.MainActivity"
android:label="@string/app_name"
android:launchMode="standard"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:screenOrientation="landscape"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.perfectworld.cfgame.wxapi.WXEntryActivity"
android:exported="true"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoDisplay"
>
</activity>
<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="false" />
</application>
</manifest>
比如这里填写了两个权限:
你用代码:
Permission.RequestUserPermissions(permissions); //弹出两个申请权限的对话框
那么可以弹出权限申请框。
但是如果在AndroidManifest.xml不填写,那么是不会弹出权限申请款,而导致直接崩溃。