根据 API 级别请求权限
Request permissions based on API level
从 Android 6.0(API 级别 23)开始,我们可以在 运行 时请求权限。但是,根据文档,所有权限仍需要在 AndroidManifest.xml 中定义,因此在 API 小于 23 时,将在安装应用程序之前授予这些权限。
我只想在 运行 时请求 ACCESS_FINE_LOCATION
权限 - 因为这是一个敏感权限,在没有任何上下文的情况下在安装之前请求它会导致下载量减少。
我将我的应用定位到 API 级别 11+,所以我想知道是否可以在较早的 API 中不请求 ACCESS_FINE_LOCATION
权限(即不列出它在 AndroidManifest for APIs older than 23), and only request it for APIs 23+.
更新
为了澄清,我想知道是否可以执行以下操作:
AndroidManifest.xml
IF API_LEVEL>=23: {
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
}
ELSE:
{
}
不,这在 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
快乐编码:)
- 您不能请求未在清单中声明的权限。
- 您不能在运行时更改您的清单。
您可以做的是 1 种风味定位 API 23+ 并声明许可 另一种风味没有针对 [=30 的许可=] 23-.
我认为你可以使用:
<uses-permission-sdk-23 android:name="string" android:maxSdkVersion="integer" />
您可以在官方文档中阅读更多相关信息:uses-permission-sdk-23
从 Android 6.0(API 级别 23)开始,我们可以在 运行 时请求权限。但是,根据文档,所有权限仍需要在 AndroidManifest.xml 中定义,因此在 API 小于 23 时,将在安装应用程序之前授予这些权限。
我只想在 运行 时请求 ACCESS_FINE_LOCATION
权限 - 因为这是一个敏感权限,在没有任何上下文的情况下在安装之前请求它会导致下载量减少。
我将我的应用定位到 API 级别 11+,所以我想知道是否可以在较早的 API 中不请求 ACCESS_FINE_LOCATION
权限(即不列出它在 AndroidManifest for APIs older than 23), and only request it for APIs 23+.
更新
为了澄清,我想知道是否可以执行以下操作:
AndroidManifest.xml
IF API_LEVEL>=23: {
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
}
ELSE:
{
}
不,这在 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 快乐编码:)
- 您不能请求未在清单中声明的权限。
- 您不能在运行时更改您的清单。
您可以做的是 1 种风味定位 API 23+ 并声明许可 另一种风味没有针对 [=30 的许可=] 23-.
我认为你可以使用:
<uses-permission-sdk-23 android:name="string" android:maxSdkVersion="integer" />
您可以在官方文档中阅读更多相关信息:uses-permission-sdk-23