根据API级别请求权限

时间:2016-07-02 07:44:49

标签: android android-manifest android-permissions

从Android 6.0(API级别23)开始,我们可以在运行时询问权限。但是,根据文档,仍需要在AndroidManifest.xml中定义所有权限,因此在低于23的API中,将在安装应用程序之前授予这些权限。

我想仅在运行时请求ACCESS_FINE_LOCATION权限 - 因为这是一个敏感权限,在安装之前请求它而没有任何上下文会导致下载量减少。

我将我的应用定位到API级别11+,所以我想知道是否有可能不在旧API中请求ACCESS_FINE_LOCATION权限(即不在AndroidManifest中为早于23的API列出它),以及仅申请API 23 +。

更新

为了澄清,我想知道是否可以执行以下操作:

的AndroidManifest.xml

IF API_LEVEL>=23: {
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
}
ELSE:
{
}

3 个答案:

答案 0 :(得分:12)

我认为您可以使用以下方式执行此操作:

<uses-permission-sdk-23 android:name="string" android:maxSdkVersion="integer" />

您可以在官方文档中了解更多相关信息:uses-permission-sdk-23

答案 1 :(得分:2)

  • 无法请求未在清单中声明的权限。
  • 无法在运行时更改清单

您可以做的是使用声明的权限制作 1种风格定位API 23 + ,而使用另一种没有权限定位API 23的风格

答案 2 :(得分:-1)

AndroidManifest.xml

中无法做到这一点

您可以在使用基于该权限的功能之前询问许可。

if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.ACCESS_FINE_LOCATION) 
        != PackageManager.PERMISSION_GRANTED) {

           //Ask for permission
           ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                requestCode); 

}else{

//already permitted . Do your work here..
}

现在覆盖onRequestPermissionsResult()查看用户是否允许请求的方法

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

            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission is granted, Now you can execute function 

            } else { 

                // permission denied, Don't execute your function to avoid any crashes

            } 
            return; 

}

您无需在此处检查SDK版本 了解更多信息click here 快乐编码:)