在Android Fragment中允许权限导致应用程序崩溃?
Posted
技术标签:
【中文标题】在Android Fragment中允许权限导致应用程序崩溃?【英文标题】:On allow permission in AndroidFragment causes application to crash? 【发布时间】:2017-01-27 02:40:21 【问题描述】:您好,我正在使用以下代码从我的片段中询问 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 ActivityRecordb66a7b9 u0 com.bootinfotech.queue.patient/com.indexnine.patient.activity.MainActivity t160: app died, no saved state
我也无法得到导致应用程序失败的确切错误。可能出了什么问题。用于测试 Moto G4 (Android M) 的设备。
一旦我单击允许相机权限系统对话框,调试器也会断开连接。
【问题讨论】:
您可以在 Activity 类中请求或检查权限。并在活动类中处理其结果。 请提供更多代码 @Vyacheslav 我只在第一次运行而不是在第二次运行时出现错误,相同的代码能够在第二次运行时获取图像 @amolanerao ,再次:请更多代码来检查此代码。你的requestPemissons
看起来不错。其他代码也在初始化。
太棒了!!! Target Sdk 是问题所在,非常感谢 Raghvendra,请发表您的评论作为答案,以便我投票。
【参考方案1】:
如果您的目标 sdk 低于 23。权限结果将始终返回 0(PERMISSION_GRANTED)。把目标sdk版本改成23试试。
参考:CheckSelfPermission method is not working in targetSdkVersion 22
【讨论】:
以上是关于在Android Fragment中允许权限导致应用程序崩溃?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Ubuntu 16.04.1 LTS 中允许文件和文件夹权限