pm grant <package_name> <permission_name>不起作用

时间:2016-11-07 11:26:48

标签: android shell authorization adb

我有一个奇怪的问题。上周我的代码就像魅力一样。我正在使用root平板电脑,我正在从代码设置调试模式,但不知道为什么,我今天早上运行我的应用程序,我正在使用的命令不再起作用,我得到“权限拒绝等。“但是,当我从我的设备的终端输入命令时,它可以工作......任何帮助?

private void grantPermission(){
    try {
        Process suProcess = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());

        Log.e("PACKAGE", getPackageName());

        os.writeBytes("adb shell" + "\n");
        os.flush();

        os.writeBytes("pm grant "+getPackageName()+" android.permission.CHANGE_CONFIGURATION" + "\n");
        os.flush();

        os.writeBytes("pm grant "+getPackageName()+" android.permission.WRITE_SECURE_SETTINGS" + "\n");
        os.flush();
    } catch (Exception e){
        e.printStackTrace();
        Log.e("SETTINGS", "FAIL");
    }
}

1 个答案:

答案 0 :(得分:1)

在这里!我终于解决了!权限没有设置得足够快,直到通话,我只是添加了对进程的waitFor()方法的调用,它再次起作用。但我仍然想知道为什么它以前曾经工作过!

private void grantPermission(){
    try {
        Process suProcess = Runtime.getRuntime().exec("su");

        DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
        os.writeBytes("pm grant "+this.getPackageName()+" android.permission.WRITE_SECURE_SETTINGS" + "\n");
        os.writeBytes("pm grant "+this.getPackageName()+" android.permission.CHANGE_CONFIGURATION" + "\n");
        os.writeBytes("exit\n");
        os.flush();

        suProcess.waitFor();
    } catch (Exception e){
        e.printStackTrace();
    }
}