在 Android Fragment 中允许权限导致应用程序崩溃?
On allow permission in AndroidFragment causes application to crash?
您好,我正在使用以下代码从我的片段中请求 android 中的相机许可:
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE},
MainActivity.PROFILEIMAGE_REQUEST);
然后使用以下代码在同一片段中处理权限结果:
case MainActivity.PROFILEIMAGE_REQUEST: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED ) {
Log.e("Fragment","In OnRequestPermission onRequestPermissionsResult");
dispatchTakePictureIntent(MainActivity.PROFILEIMAGE_REQUEST); }
return;
}
现在,当我 运行 第一次申请时,当我点击允许我的应用程序在后台崩溃时,它会询问相机权限,然后我会看到存储权限框。
也在 MainActivity 中编写代码:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
Log.e("MainActivity", "In OnRequestPermission 1");
if (fragments != null) {
for (Fragment fragment : fragments) {
switch (requestCode) {
.
.
.
case PROFILEIMAGE_REQUEST:
if (fragment instanceof ProfileFragment) {
fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.e("MainActivity","In OnRequestPermission PROFILEIMAGE_REQUEST");
return;
}
break;
.
.
.
.
.
}
}
}
当我看到警告过滤日志时,无法获取堆栈跟踪后崩溃的日志:
W/ActivityManager: Force removing ActivityRecord{b66a7b9 u0 com.bootinfotech.queue.patient/com.indexnine.patient.activity.MainActivity t160}: app died, no saved state
此外,我无法获得导致应用程序失败的确切错误。可能出了什么问题。用于测试 Moto G4 的设备(Android M)。
此外,当我单击允许相机权限系统对话框时,调试器也会断开连接。
如果你的目标sdk低于23,权限结果总是return0(PERMISSION_GRANTED)。把目标sdk版本改成23试试。
参考:
您好,我正在使用以下代码从我的片段中请求 android 中的相机许可:
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE},
MainActivity.PROFILEIMAGE_REQUEST);
然后使用以下代码在同一片段中处理权限结果:
case MainActivity.PROFILEIMAGE_REQUEST: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED ) {
Log.e("Fragment","In OnRequestPermission onRequestPermissionsResult");
dispatchTakePictureIntent(MainActivity.PROFILEIMAGE_REQUEST); }
return;
}
现在,当我 运行 第一次申请时,当我点击允许我的应用程序在后台崩溃时,它会询问相机权限,然后我会看到存储权限框。
也在 MainActivity 中编写代码:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
Log.e("MainActivity", "In OnRequestPermission 1");
if (fragments != null) {
for (Fragment fragment : fragments) {
switch (requestCode) {
.
.
.
case PROFILEIMAGE_REQUEST:
if (fragment instanceof ProfileFragment) {
fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.e("MainActivity","In OnRequestPermission PROFILEIMAGE_REQUEST");
return;
}
break;
.
.
.
.
.
}
}
}
当我看到警告过滤日志时,无法获取堆栈跟踪后崩溃的日志:
W/ActivityManager: Force removing ActivityRecord{b66a7b9 u0 com.bootinfotech.queue.patient/com.indexnine.patient.activity.MainActivity t160}: app died, no saved state
此外,我无法获得导致应用程序失败的确切错误。可能出了什么问题。用于测试 Moto G4 的设备(Android M)。
此外,当我单击允许相机权限系统对话框时,调试器也会断开连接。
如果你的目标sdk低于23,权限结果总是return0(PERMISSION_GRANTED)。把目标sdk版本改成23试试。
参考: