已经在 android 6.0 上请求危险权限,并在设置=>应用程序中检查它。但应用程序仍然在 android 6.0 上崩溃
Already request dangerous permission on android 6.0, and check it in setting=>app. but app still crash on android 6.0
我的应用程序在 android 6.0 上崩溃。我知道这是由危险许可引起的,广告网络需要这些许可。我已经请求并同意我的应用程序需要 Write_external_storage、read_phone_state 这些权限,但它仍然崩溃。怎么了?我使用 unity 5.3.5f1.
Logcat genymotion:
11-25 04:22:47.034 I/art (21550): Rejecting re-init on previously-failed class
java.lang.Class
11-25 04:22:47.034 I/art (21550): Rejecting re-init on
previously-failed class
java.lang.Class
11-25 04:22:47.036 W/Ads (21550): There was a problem getting an
ad response. ErrorCode: 2
11-25 04:22:47.142 W/ActivityManager(20685): Activity pause timeout
for ActivityRecord{bed9d6c u0
com.candyjuice/com.unity3d.player.UnityPlayerActivity t4 f}
11-25 04:22:47.210 W/EGL_emulation(21094): eglSurfaceAttrib not
implemented
11-25 04:22:47.210 W/OpenGLRenderer(21094): Failed to set
EGL_SWAP_BEHAVIOR on surface 0xdecd1d80, error=EGL_SUCCESS
11-25 04:22:47.228 W/Ads (21550): There was a problem getting an
ad response. ErrorCode: 2
11-25 04:22:47.290 I/GlobalDismissManager(21481): no sender configured
11-25 04:22:47.291 D/AlertService(21481): Beginning
updateAlertNotification
11-25 04:22:47.294 D/AlertService(21481): No fired or scheduled alerts
11-25 04:22:47.296 D/AlertService(21481): Scheduling next alarm with
AlarmScheduler. sEventReminderReceived: null
11-25 04:22:47.299 D/AlarmScheduler(21481): No events found starting
within 1 week.
11-25 04:22:48.756 W/GooglePlayServicesUtil(21550): Google Play Store
is missing.
11-25 04:22:48.756 W/VungleNetwork(21550):
java.net.UnknownHostException: Unable to resolve host
"api.vungle.com": No address associated with hostname
11-25 04:22:48.763 W/VungleNetwork(21550):
java.net.UnknownHostException: Unable to resolve host
"api.vungle.com": No address associated with hostname
11-25 04:22:48.820 I/OneSignal(21550): GetUnsentActiveTime: 0
11-25 04:22:48.820 I/OneSignal(21550): SaveUnsentActiveTime: 2
11-25 04:22:48.851 W/AudioTrack(20685): AUDIO_OUTPUT_FLAG_FAST denied
by client; transfer 4, track 48000 Hz, output 44100 Hz
11-25 04:22:48.867 I/Process (21550): Sending signal. PID: 21550 SIG:
9
11-25 04:22:48.890 E/Surface (20685): getSlotFromBufferLocked: unknown
buffer: 0xf2cb6600
11-25 04:22:48.893 D/OpenGLRenderer(20685): endAllStagingAnimators on
0xd9931b00 (RippleDrawable) with handle 0xdcc0be00
11-25 04:22:48.896 E/JavaBinder(20685): !!! FAILED BINDER TRANSACTION
!!! (parcel size = 104)
11-25 04:22:48.896 W/InputMethodManagerService(20685): Got
RemoteException sending setActive(false) notification to pid 21550 uid
10060
11-25 04:22:48.896 E/JavaBinder(20685): !!! FAILED BINDER TRANSACTION
!!! (parcel size = 104)
11-25 04:22:48.899 D/GraphicsStats(20685): Buffer count: 3
11-25 04:22:48.899 I/WindowState(20685): WIN DEATH: Window{d9b3a6e u0
com.candyjuice/com.unity3d.player.UnityPlayerActivity}
11-25 04:22:48.899 W/WindowManager(20685): Force-removing child win
Window{3bca2c7 u0 SurfaceView} from container Window{d9b3a6e u0
com.candyjuice/com.unity3d.player.UnityPlayerActivity}
11-25 04:22:48.899 W/MediaFocusControl(20685): AudioFocus audio
focus client died
11-25 04:22:48.899 I/MediaFocusControl(20685): AudioFocus
removeFocusStackEntry(): removing entry for
android.os.BinderProxy@dd420f4
11-25 04:22:48.902 W/WindowManager(20685): Failed looking up window
11-25 04:22:48.902 W/WindowManager(20685):
java.lang.IllegalArgumentException: Requested window
android.os.BinderProxy@f7e5388 does not exist
11-25 04:22:48.902 W/WindowManager(20685): at
com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:8733)
11-25 04:22:48.902 W/WindowManager(20685): at
com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:8724)
11-25 04:22:48.902 W/WindowManager(20685): at
com.android.server.wm.WindowState$DeathRecipient.binderDied(WindowState.java:1209)
11-25 04:22:48.902 W/WindowManager(20685): at
android.os.BinderProxy.sendDeathNotice(Binder.java:558)
11-25 04:22:48.902 I/WindowState(20685): WIN DEATH: null
11-25 04:22:48.904 I/ActivityManager(20685): Process com.candyjuice
(pid 21550) has died
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
Log.i("NoodlePermissionGranter", "onRequestPermissionsResult");
if (requestCode != PERMISSIONS_REQUEST_CODE)
return;
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
Log.i("NoodlePermissionGranter", PERMISSION_GRANTED);
UnityPlayer.UnitySendMessage(UNITY_CALLBACK_GAMEOBJECT_NAME, UNITY_CALLBACK_METHOD_NAME, PERMISSION_GRANTED);
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Log.i("NoodlePermissionGranter",PERMISSION_DENIED);
UnityPlayer.UnitySendMessage(UNITY_CALLBACK_GAMEOBJECT_NAME, UNITY_CALLBACK_METHOD_NAME, PERMISSION_DENIED);
}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(this);
fragmentTransaction.commit();
//SDD
// shouldBeOkayToStartTheApplicationNow();
}
};
您必须实际请求并检查用户是否授予使用权限
在 void onCreate(Bundle savedInstanceState) 方法中检查这个
If (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_RC);
return;
}
然后覆盖 onRequestPermissionsResult 方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == STORAGE_PERMISSION_RC) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//permission granted start reading
} else {
Toast.makeText(this, "No permission to read external storage.", Toast.LENGTH_SHORT).show();
}
}
}
}
我的应用程序在 android 6.0 上崩溃。我知道这是由危险许可引起的,广告网络需要这些许可。我已经请求并同意我的应用程序需要 Write_external_storage、read_phone_state 这些权限,但它仍然崩溃。怎么了?我使用 unity 5.3.5f1.
Logcat genymotion:
11-25 04:22:47.034 I/art (21550): Rejecting re-init on previously-failed class java.lang.Class
11-25 04:22:47.034 I/art (21550): Rejecting re-init on previously-failed class java.lang.Class
11-25 04:22:47.036 W/Ads (21550): There was a problem getting an ad response. ErrorCode: 2
11-25 04:22:47.142 W/ActivityManager(20685): Activity pause timeout for ActivityRecord{bed9d6c u0 com.candyjuice/com.unity3d.player.UnityPlayerActivity t4 f}
11-25 04:22:47.210 W/EGL_emulation(21094): eglSurfaceAttrib not implemented
11-25 04:22:47.210 W/OpenGLRenderer(21094): Failed to set EGL_SWAP_BEHAVIOR on surface 0xdecd1d80, error=EGL_SUCCESS
11-25 04:22:47.228 W/Ads (21550): There was a problem getting an ad response. ErrorCode: 2
11-25 04:22:47.290 I/GlobalDismissManager(21481): no sender configured
11-25 04:22:47.291 D/AlertService(21481): Beginning updateAlertNotification
11-25 04:22:47.294 D/AlertService(21481): No fired or scheduled alerts
11-25 04:22:47.296 D/AlertService(21481): Scheduling next alarm with AlarmScheduler. sEventReminderReceived: null
11-25 04:22:47.299 D/AlarmScheduler(21481): No events found starting within 1 week.
11-25 04:22:48.756 W/GooglePlayServicesUtil(21550): Google Play Store is missing.
11-25 04:22:48.756 W/VungleNetwork(21550): java.net.UnknownHostException: Unable to resolve host "api.vungle.com": No address associated with hostname
11-25 04:22:48.763 W/VungleNetwork(21550): java.net.UnknownHostException: Unable to resolve host "api.vungle.com": No address associated with hostname
11-25 04:22:48.820 I/OneSignal(21550): GetUnsentActiveTime: 0
11-25 04:22:48.820 I/OneSignal(21550): SaveUnsentActiveTime: 2
11-25 04:22:48.851 W/AudioTrack(20685): AUDIO_OUTPUT_FLAG_FAST denied by client; transfer 4, track 48000 Hz, output 44100 Hz
11-25 04:22:48.867 I/Process (21550): Sending signal. PID: 21550 SIG: 9
11-25 04:22:48.890 E/Surface (20685): getSlotFromBufferLocked: unknown buffer: 0xf2cb6600
11-25 04:22:48.893 D/OpenGLRenderer(20685): endAllStagingAnimators on 0xd9931b00 (RippleDrawable) with handle 0xdcc0be00
11-25 04:22:48.896 E/JavaBinder(20685): !!! FAILED BINDER TRANSACTION !!! (parcel size = 104)
11-25 04:22:48.896 W/InputMethodManagerService(20685): Got RemoteException sending setActive(false) notification to pid 21550 uid 10060
11-25 04:22:48.896 E/JavaBinder(20685): !!! FAILED BINDER TRANSACTION !!! (parcel size = 104)
11-25 04:22:48.899 D/GraphicsStats(20685): Buffer count: 3
11-25 04:22:48.899 I/WindowState(20685): WIN DEATH: Window{d9b3a6e u0 com.candyjuice/com.unity3d.player.UnityPlayerActivity}
11-25 04:22:48.899 W/WindowManager(20685): Force-removing child win Window{3bca2c7 u0 SurfaceView} from container Window{d9b3a6e u0 com.candyjuice/com.unity3d.player.UnityPlayerActivity}
11-25 04:22:48.899 W/MediaFocusControl(20685): AudioFocus audio focus client died
11-25 04:22:48.899 I/MediaFocusControl(20685): AudioFocus removeFocusStackEntry(): removing entry for android.os.BinderProxy@dd420f4
11-25 04:22:48.902 W/WindowManager(20685): Failed looking up window
11-25 04:22:48.902 W/WindowManager(20685): java.lang.IllegalArgumentException: Requested window android.os.BinderProxy@f7e5388 does not exist
11-25 04:22:48.902 W/WindowManager(20685): at com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:8733)
11-25 04:22:48.902 W/WindowManager(20685): at com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:8724)
11-25 04:22:48.902 W/WindowManager(20685): at com.android.server.wm.WindowState$DeathRecipient.binderDied(WindowState.java:1209)
11-25 04:22:48.902 W/WindowManager(20685): at android.os.BinderProxy.sendDeathNotice(Binder.java:558)
11-25 04:22:48.902 I/WindowState(20685): WIN DEATH: null
11-25 04:22:48.904 I/ActivityManager(20685): Process com.candyjuice (pid 21550) has died
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
Log.i("NoodlePermissionGranter", "onRequestPermissionsResult");
if (requestCode != PERMISSIONS_REQUEST_CODE)
return;
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
Log.i("NoodlePermissionGranter", PERMISSION_GRANTED);
UnityPlayer.UnitySendMessage(UNITY_CALLBACK_GAMEOBJECT_NAME, UNITY_CALLBACK_METHOD_NAME, PERMISSION_GRANTED);
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Log.i("NoodlePermissionGranter",PERMISSION_DENIED);
UnityPlayer.UnitySendMessage(UNITY_CALLBACK_GAMEOBJECT_NAME, UNITY_CALLBACK_METHOD_NAME, PERMISSION_DENIED);
}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(this);
fragmentTransaction.commit();
//SDD
// shouldBeOkayToStartTheApplicationNow();
}
};
您必须实际请求并检查用户是否授予使用权限
在 void onCreate(Bundle savedInstanceState) 方法中检查这个
If (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_RC);
return;
}
然后覆盖 onRequestPermissionsResult 方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == STORAGE_PERMISSION_RC) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//permission granted start reading
} else {
Toast.makeText(this, "No permission to read external storage.", Toast.LENGTH_SHORT).show();
}
}
}
}