Vit*_*lds 5 android android-permissions android-settings
我们目前正在开发一个应用程序,我们想更改一些系统设置,当然需要用户许可。android 文档说要做到这一点,你必须添加以下权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
Run Code Online (Sandbox Code Playgroud)
此外,必须明确要求用户启用此权限。摘自https://developer.android.com/reference/android/Manifest.permission#WRITE_SETTINGS说:
注意:如果应用以 API 级别 23 或更高级别为目标,应用用户必须通过权限管理屏幕向应用明确授予此权限。该应用程序通过发送带有 action 的意图来请求用户的批准
Settings.ACTION_MANAGE_WRITE_SETTINGS。应用程序可以通过调用 来检查它是否具有此授权Settings.System.canWrite()。
到此为止,已经很清楚了。但是,当将权限添加到AndroidManifest.xml文件时,Android Studio 会抱怨“权限仅授予系统应用程序”。现在,这令人困惑,因为我还没有找到任何说明它确实只授予系统应用程序的文档。
所以,我想问一下是否有人遇到过这个问题,是否有某种文档详细解释了这一点?或者我只是错过了什么?
小智 5
您需要专门从用户那里获取用户权限,我的意思是您必须将用户带到一个屏幕,用户可以在其中向您的应用程序授予 WRITE_SETTINGS 权限。
因此,当您想要更改系统设置时,您必须检查用户是否已授予权限,如下所示:
private boolean checkSystemWritePermission() {
boolean retVal = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
retVal = Settings.System.canWrite(this);
Log.d("TAG", "Can Write Settings: " + retVal);
if(retVal){
///Permission granted by the user
}else{
//permission not granted navigate to permission screen
openAndroidPermissionsMenu();
}
}
return retVal;
}
private void openAndroidPermissionsMenu() {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + this.getPackageName()));
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
正如Brian提供的stackoverflow问题中的用户passsy所说,有一个of ,这使得自 API 级别 23 以来该权限无法在用户应用程序中使用。
请参阅https://developer.android.com/guide/topics/manifest/permission -element#plevel用于权限保护级别的描述。android.permission.WRITE_SETTINGSandroid:protectionLevel"signature"
| 归档时间: |
|
| 查看次数: |
2606 次 |
| 最近记录: |