Android:从设置外部更改相机权限会导致应用程序共享首选项清除

Posted

技术标签:

【中文标题】Android:从设置外部更改相机权限会导致应用程序共享首选项清除【英文标题】:Android : Changing camera Permission externally from settings causes apps shared preferences clears 【发布时间】:2017-08-31 00:10:03 【问题描述】:
    打开应用请求相机权限提供权限(共享首选项中保存的数据) 最小化应用,应用进入后台 进入设置页面撤销相机权限 再次回到应用程序导致共享偏好数据为空

【问题讨论】:

你能发布你的代码吗? 不管共享偏好如何,它应该是这样工作的。 可能与撤销权限无关,可能是导致这种情况发生的原因只是关闭并重新打开应用程序,试试这个,执行步骤 1 和 2,然后强制关闭应用程序(从设置)然后执行第 4 步并检查偏好数据 【参考方案1】:

对于活动,您应该检查 onCreate 状态或 SplashActivity 中的共享首选项,对于片段,您应该将 sharedPreference 状态传递给 mainactivity 类。

首先检查 sharedPreference 状态并创建一个布尔变量,它将检查清单中的权限,如下所示:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
        SharedPreferences prefs = getActivity().getSharedPreferences("ShortCutPrefs", 0);
        if (!prefs.getBoolean("isPermitted", false)) 

            if (per == false) 
                if ((getActivity().checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED)) 
                    requestPermissions(new String[]Manifest.permission.READ_PHONE_STATE, 1);

return;
                    
                
             else 
                if (per == false) 
                    if ((getActivity().checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED)) 
                        requestPermissions(new String[]Manifest.permission.READ_PHONE_STATE, 1);
return;
                
            

以及权限检查部分:

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) 
    switch (requestCode) 
        case 1: 
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) 

                SharedPreferences prefs = getActivity().getSharedPreferences("ShortCutPrefs", 0);

                SharedPreferences.Editor editor = prefs.edit();
                editor.putBoolean("isPermitted", true);
                editor.commit();
                per = true;
                setData();
             else 
                Toast.makeText(getActivity(), "Permission denied to check you device details, grant this app permission", Toast.LENGTH_LONG).show();
            
            return;
        

    

这样您可以检查是否有人从设置中删除了权限,并在您的应用开始时询问他们。

祝你好运!

【讨论】:

以上是关于Android:从设置外部更改相机权限会导致应用程序共享首选项清除的主要内容,如果未能解决你的问题,请参考以下文章

如何在更改相机权限后阻止iOS应用重置?

使用 SurfaceView 的 Android 游戏循环;快速更改相机“镜头”会导致黑色闪光等

关于Android6.0权限的学习

在Android Fragment中允许权限导致应用程序崩溃?

Android学习之相机权限适配问题详解

Android:在方向更改时保留相机预览,而其他视图可以旋转