在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中允许权限导致应用程序崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Glassfish 中允许该权限

如何在 Ubuntu 16.04.1 LTS 中允许文件和文件夹权限

如何在 Android WebView 中允许访问相机

Android 上的文件名中允许使用哪些字符?

Gradle 错误:仅在 Android Studio 中允许从事件调度线程进行写访问

我如何在 MySql 中允许外部连接?