从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:
{
}
答案 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 快乐编码:)