android.permission.WRITE_SETTINGS仅授予系统应用程序吗?

11

我们正在开发一款应用程序,希望在用户允许的情况下更改一些系统设置。Android文档指出,要实现这一功能,您需要添加以下权限:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
此外,用户必须明确要求启用此权限。来自https://developer.android.com/reference/android/Manifest.permission#WRITE_SETTINGS的摘录如下:

注意:如果应用程序针对API级别23或更高级别,则必须通过权限管理屏幕向应用程序用户明确授予此权限。 应用程序通过发送具有操作Settings.ACTION_MANAGE_WRITE_SETTINGS的意图来请求用户的批准。 应用程序可以通过调用Settings.System.canWrite()来检查是否拥有此授权。

到目前为止,情况非常清楚。 但是,当将权限添加到AndroidManifest.xml文件中时,Android Studio会抱怨“Permission is only granted to system apps”。现在,这很令人困惑,因为我没有找到任何说明它确实仅授予系统应用程序的文档。

因此,我想问问是否有人遇到了此问题,并且是否有详细说明这一点的文档? 还是我简单地错过了什么?

1
请查看此链接:https://dev59.com/iVwY5IYBdhLWcg3w5bTt - Brian
2个回答

4

4
你需要从用户那里明确获取用户的权限,也就是说,你必须将用户带到一个屏幕上,在此屏幕上,用户可以授予你的应用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);
 }

1
我对此很熟悉。请检查我的答案。 - Vitolds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接