为了在专用设备上运行我们的应用程序,我想禁用设备硬件按钮,例如主页、任务和后退按钮。 我的 Android 版本是 13,设备是 Samsung Galaxy Tab Active 3 2020,尽管我希望它可以在其他设备上运行。 我已经知道我必须编辑
/system/usr/keylayout/Generic.kl
并且该应用程序具有 root
权限。所以我在运行时运行它,它在 Android 10 上正常工作:
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("mount -o remount,rw /\n");
os.writeBytes("sed -i 's/^[^#]*BACK/# &/' /system/usr/keylayout/Generic.kl\n");
os.writeBytes("sed -i 's/^[^#]*HOME/# &/' /system/usr/keylayout/Generic.kl\n");
os.writeBytes("sed -i 's/^[^#]*APP_SWITCH/# &/' /system/usr/keylayout/Generic.kl\n");
os.writeBytes("reboot\n");
os.writeBytes("exit\n");
os.flush();
但是问题是,一旦对
Generic.kl
执行第一次编辑,这意味着这一行:
sed -i 's/^[^#]*BACK/# &/' /system/usr/keylayout/Generic.kl\n
平板电脑自动重启,文件
Generic.kl
恢复到初始状态。因此,以编程方式编辑它没有成功。
我不确定您的要求的上下文,但是,在较新的 Android 版本(包括 Android 13)中,系统分区默认安装为只读以提高安全性。
您可以尝试作为默认主屏幕运行的自定义启动器应用程序。该启动器可以隐藏硬件按钮或根据您的应用程序的要求处理它们的操作。