ADB Shell设置将安全的sysui_nav_bar命令放在Android Oreo 8.0上,没有root



我正在尝试在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"/>

然后,在我的主动脉中,我添加了一个按钮来运行您之前阅读的命令。

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

构建了我的应用后,我将其运行在5倍上,通过ADB,我键入此命令以允许编写安全设置:adb shell pm grant com.customizer.smart.batterysavercustomizer android.permission.WRITE_SECURE_SETTINGS,并且此命令在没有错误的情况下对此进行了拒绝。但是,当我尝试利用我的" testbutton"时,什么也没有发生,并且在AndroidMonitor内部进行0个ERORR。

最后一次尝试是在根帮助下。我编辑了我的预览命令按钮:

    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命令的应用程序"自定义导航栏"应用程序如何无根?我遵循了这一点:XDA指南

您应该使用设置类代替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
        }
    }
});

最新更新