是否有任何选项可以检查Android中的无障碍权限状态(是否授予应用)[重复]

ki0zmccv  于 2023-02-20  发布在  Android
关注(0)|答案(1)|浏览(133)
    • 此问题在此处已有答案**:

How permission can be checked at runtime without throwing SecurityException?(11个答案)
5年前关闭。
截至15天前,社区正在审查是否重新讨论这个问题。
是否有任何选项可以检查Android中的辅助功能权限状态,无论是否授予应用?
我两个都试过了(来自this post)

private boolean checkWriteExternalPermission()
{
    String permission =  Manifest.permission.BIND_ACCESSIBILITY_SERVICE;
    int res = getContext().checkCallingOrSelfPermission(permission);
    return (res == PackageManager.PERMISSION_GRANTED);            
}

以及

PackageManager pm = context.getPackageManager();
int hasPerm = pm.checkPermission(
    android.Manifest.permission.BIND_ACCESSIBILITY_SERVICE, 
    context.getPackageName());
if (hasPerm != PackageManager.PERMISSION_GRANTED) {
   // do stuff
}

但是在这两种情况下,无论权限状态如何,结果都是否定的。即使服务正在使用权限,结果也是-1。

请查看评论以获得正确答案,因为问题关闭时无法接收答案。感谢abdu和Duna。

ubof19bj

ubof19bj1#

您可以使用以下代码检查应用的权限状态。(此处用于外部存储的写入权限)。

if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)
            {
                //Permission Granted
                Log.v("LOG", "Permission is granted ");
                return true;
            }
            else{
                //Request For Permission
                Log.v("LOG","Permission is Revoked");
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                return false;
            }

如果权限被撤消,则使用此覆盖方法

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if(grantResults[0] == PackageManager.PERMISSION_GRANTED)
        {
            Log.v("LOG", "Permission: " + permissions[0] + "was" + grantResults[0]);
            //resume task needing this permission
        }

    }

相关问题