pm grant <PACKAGE_NAME> <PERMISSION_NAME> 不工作

pm grant <PACKAGE_NAME> <PERMISSION_NAME> not working

我有一个奇怪的问题。上周我让我的代码运行得非常棒。我在有根平板电脑上工作,我正在通过代码设置调试模式,但不知道为什么,我 运行 今天早上我的应用程序和我用来执行此操作的命令不再起作用,我得到 "Permission Denial etc.." 但是,当我从设备的终端键入命令时,它有效...有帮助吗?

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");
    }
}

在这里!我终于修好了!在调用之前,权限设置不够快,我只是添加了一个对进程的 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();
    }
}