adb shell设置在Android上安装sysui_nav_bar命令Oreo 8.0无法在没有root的情况下运行

时间:2017-09-01 21:06:29

标签: android shell adb

我正试图在Android Oreo上使用这套“命令”,但我有一些问题。为了测试我在Nexus 5x上使用此命令:

adb shell settings put secure sysui_nav_bar "space,recent;home;back,space"

所以我决定在我的应用程序中实现此命令,并尝试没有root帮助。在应用程序清单中,我添加了写安全设置的权限:

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>

然后在我的MainActivity中添加了一个按钮来运行您之前读过的命令。

        testButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            try {
            Process process = Runtime.getRuntime().exec("settings put secure sysui_nav_bar \"space,recent;home;back,space\""); 
            } catch (Exception e) {Toast.makeText(getApplicationContext(), "" + e, Toast.LENGTH_LONG).show();}
        }
    });

我的应用程序构建后,我在我的5x上运行它并通过adb我键入此命令以允许编写安全设置:adb shell pm grant com.customizer.smart.batterysavercustomizer android.permission.WRITE_SECURE_SETTINGS并且此命令已被执行且没有错误。但是,当我试图点击我的“testButton”时,没有任何事情发生,并且在androidmonitor中有0个erorrs。

我做的最后一次尝试是使用root帮助。我编辑了我的预览命令按钮:

    testButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        try {
        Process process = Runtime.getRuntime().exec("su -c settings put secure sysui_nav_bar \"space,recent;home;back,space\""); 
        } catch (Exception e) {Toast.makeText(getApplicationContext(), "" + e, Toast.LENGTH_LONG).show();}
    }
});

当我点击我的testButton时,应用程序要求获得root权限,并且它可以正常工作。但是如何在同一部手机上使用相同adb命令的应用程序“自定义导航栏”应用程序在没有root的情况下工作? 我遵循了这个:guide on XDA

1 个答案:

答案 0 :(得分:1)

您应该使用Settings类而不是Runtime.getRuntime()。exec()

testButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SECURE_SETTINGS) == PackageManager.PERMISSION_GRANTED) {
            Settings.Secure.putString(context.getContentResolver(), "sysui_nav_bar", valueToSave);
        } else {
            //Write secure Settings permission not granted
            //Show instructions about how to grant it via ADB
        }
    }
});