【问题标题】:pm grant <PACKAGE_NAME> <PERMISSION_NAME> not workingpm grant <PACKAGE_NAME> <PERMISSION_NAME> 不工作
【发布时间】:2016-11-07 11:26:47
【问题描述】:

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

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

【问题讨论】:

  • 它曾经在代码中工作过吗?也是先手动设置后又能正常工作吗?
  • 是的,是的,是的……

标签: android shell authorization adb


【解决方案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();
    }
}

【讨论】:

    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    相关资源
    最近更新 更多