【问题标题】:Is there any option to check the status of accessibility permission in android (granted to the app or not) [duplicate]是否有任何选项可以检查android中的可访问性权限状态(是否授予应用程序)[重复]
【发布时间】:2017-10-16 16:09:32
【问题描述】:

是否有任何选项可以检查android中的可访问权限状态(是否授予应用程序)。

都试过了(来自this 帖子)

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

请检查 cmets 以获取正确答案,它不再能够接收答案。感谢 abdu 和 Duna

【问题讨论】:

  • ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR); read
  • 我已经尝试过了,但无论状态如何,它都会返回 -1(我使用 Manifest.permission.BIND_ACCESSIBILITY_SERVICE)
  • public static boolean isAccessibilityEnabled(Context context, String id) { AccessibilityManager am = (AccessibilityManager) context .getSystemService(Context.ACCESSIBILITY_SERVICE); List runningServices = am.getEnabledAccessibilityServiceList(AccessibilityEvent.TYPES_ALL_MASK); for (AccessibilityServiceInfo service : runningServices) { if (id.equals(service.getId())) { return true; } } 返回假; }
  • 你能把这个作为答案发布吗

标签: java android android-studio permissions


【解决方案1】:

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

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
        }

    } 

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-11-23
  • 2021-09-18
  • 2016-03-14
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多