程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了检查是否授予不同的应用程序权限大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决检查是否授予不同的应用程序权限?

开发过程中遇到检查是否授予不同的应用程序权限的问题如何解决?下面主要结合日常开发的经验,给出你关于检查是否授予不同的应用程序权限的解决方法建议,希望对你解决检查是否授予不同的应用程序权限有所启发或帮助;

我在互联网上阅读了两种检查应用是否获得许可的选项。

选项 1:

getPackageManager().checkPermission(permission_String,packageName);

选项 2:

(PackageInfo.requestedPermissionsFlag[i] & PackageInfo.requESTED_PERMISSION_GRANTED) != 0

我在 AndroID 11 上运行。我正在实施一种机制,在单击应用程序时,将检查权限状态,如果权限不被允许,将提示用户允许它。我只检查“高级”权限,这意味着需要用户从设置屏幕允许它们的权限,例如管理外部存储(适用于 androID 11)、drawOverlay、writeSetTings 等。无论如何,这是我正在使用的代码:

try {
            PackageInfo pi = getPackageManager().getPackageInfo(currAppInfo.getname(),PackageManager.GET_PERMISSIONS);
            for(int i=0; i<pi.requestedPermissions.length; i++)
            {
                String perm = pi.requestedPermissions[i];
                
                PermissionInfo permi = getPackageManager().getPermissionInfo(perm,PackageManager.GET_Meta_DATA);
                if(getPackageManager().checkPermission(perm,currAppInfo.getname()) == 0)
                    conTinue;
                if(AdvancedPermissionHandler.isAdvancedPermission(permi))
                {
                    AdvancedPermissionHandler.openSetTingsPage(permi,currAppInfo.getname(),MainActivity.this);
                    return;
                }
            }
        } catch (Exception E) {
            e.printstacktrace();
        }

我面临的唯一问题是,即使我使用了选项 1,即使我使用了选项 2,我的支票也总是出错。意思是,假设我单击一个需要管理外部存储的应用程序,并且当前不允许其状态。我单击应用程序,移动到相应的屏幕,允许权限,返回主屏幕,当我再次单击应用程序时,我没有打开,而是移动到相同的权限屏幕。调试器显示

getPackageManager().checkPermission(permission_String,packageName);

返回 false,即使已授予权限。当我使用选项 2 时也是如此。 所以我的问题是,还有哪些其他方法可以用来确定是否向其他应用授予了权限,或者我在这段代码中做错了什么。

解决方法

@H_675_32@

在进一步挖掘之后,我发现了 AppOps。 这是我用来工作的代码,Android 11:

AppOpsmanager appOps = (AppOpsmanager)getSystemservice(Context.APP_OPS_serviCE);
            ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(currAppInfo.getName(),0);

            PackageInfo pi = getPackageManager().getPackageInfo(currAppInfo.getName(),PackageManager.GET_PERMISSIONS);
            for(int i=0; i<pi.requestedPermissions.length; i++)
            {
                String perm = pi.requestedPermissions[i];
                PermissionInfo permi = getPackageManager().getPermissionInfo(perm,PackageManager.GET_META_DATA);
                if(AppOpsmanager.permissionToOp(permi.Name) == null)
                    conTinue;
                Boolean granted = (appOpS.UnsafecheckOpNoThrow(AppOpsmanager.permissionToOp(permi.Name),applicationInfo.uid,currAppInfo.getName()) == AppOpsmanager.MODE_ALLOWED);
                if(granted)
                    conTinue;
            }

大佬总结

以上是大佬教程为你收集整理的检查是否授予不同的应用程序权限全部内容,希望文章能够帮你解决检查是否授予不同的应用程序权限所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。