Android 基于API级别请求权限

Android 基于API级别请求权限,android,android-manifest,android-permissions,Android,Android Manifest,Android Permissions,从Android 6.0(API级别23)开始,我们可以在运行时请求权限。但是,根据文档,所有权限仍需要在AndroidManifest.xml中定义,因此在低于23的API中,这些权限将在安装应用程序之前授予 我只想在运行时请求ACCESS\u FINE\u LOCATION权限-因为这是一个敏感权限,在安装之前请求它而不使用任何上下文将导致下载量减少 我将我的应用程序定位于API级别11+,因此我想知道是否可以不在较旧的API中请求访问\u FINE\u位置权限(即,对于超过23的API,不

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

我只想在运行时请求
ACCESS\u FINE\u LOCATION
权限-因为这是一个敏感权限,在安装之前请求它而不使用任何上下文将导致下载量减少

我将我的应用程序定位于API级别11+,因此我想知道是否可以不在较旧的API中请求
访问\u FINE\u位置
权限(即,对于超过23的API,不在AndroidManifest中列出它),而只请求API 23+

更新

为了澄清,我想知道是否有可能做到以下几点:

AndroidManifest.xml

如果API_级别>=23:{
}
其他:
{
}

不,这在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版本 更多信息 快乐编码:)

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

您可以做的是,在声明权限的情况下,使1味针对API 23+另一味针对API 23-,我认为您可以使用以下方法来实现:

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


您可以在官方文档中了解更多信息:

在运行时,如果版本>=23,您将按版本检查权限,而不是在else do nothing中检查运行时权限。…@Er.Arjunsaini,我不需要在AndroidManifest.xml中静态列出此权限吗?“在所有版本的Android上,您的应用程序都需要在其应用程序清单中声明其所需的正常权限和危险权限,如声明权限中所述。“如果您试图同时使用网络提供商和GPS提供商,那么您需要请求访问\u FINE\u位置权限,因为它包括两个提供商的权限。简单明了的回答:不。很高兴它能帮助您。致以最良好的问候。”。
<uses-permission-sdk-23 android:name="string" android:maxSdkVersion="integer" />