如何正确地动态检查Android权限

Dav*_* T. 6 permissions android package android-manifest android-context

多项选择题:

以下哪项将正确检查应用程序是否在其AndroidManifest.xml中声明了某个权限?

getContext().checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
Run Code Online (Sandbox Code Playgroud)

要么

getContext().getPackageManager().checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, getContext().getPackageName()) == PackageManager.PERMISSION_GRANTED
Run Code Online (Sandbox Code Playgroud)

基本上,我从Android文件中害怕什么checkCallingOrSelfPermission声称 - >如果你只是检查它,它授予IPC权限?那有什么意思? http://developer.android.com/reference/android/content/Context.html#checkCallingOrSelfPermission(java.lang.String)

所以对真正差异的任何解释都会很棒:D

*注意:我在库中提供此代码,因此我只允许在运行时检查权限,除非您知道更好的方法.

Phi*_*hil 3

你可以使用这个方法:

//for example, permission can be "android.permission.WRITE_EXTERNAL_STORAGE"
public boolean hasPermission(String permission) 
{
    try {
        PackageInfo info = getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS);
        if (info.requestedPermissions != null) {
            for (String p : info.requestedPermissions) {
                if (p.equals(permission)) {
                    return true;
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)