我正在开发一个 Android 应用程序,我们需要在某些情况下关闭设备。
我在很多地方都读到过,你需要一个有根电话才能这样做。然后,您可以使用 Java 的 API 发出“重启”命令:
try {
Process proc = Runtime.getRuntime()
.exec(new String[]{ "su", "-c", "reboot -p" });
proc.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
我实际上已经在 Cyanogenmod 10 设备(Samsung Galaxy S3)中尝试过这个,它可以工作。但是,我们不希望有根设备来关闭它,因为最终用户将能够做我们公司不允许的意外事情。
另一方面,我们的申请由制造商的证书签署,在这种情况下是 Cyanogen 的。我已经读过,通过使用制造商的证书签署您的应用程序,您应该能够发出特权命令(就像 root 一样)。但是,即使我将我的应用程序安装为使用制造商证书签名的系统应用程序,上述代码也不起作用:
如果我离开命令的“su”部分,则会显示“超级用户请求”屏幕,但这是我们试图避免的事情。
如果我删除“su”部分(只留下“reboot -p”),该命令将被忽略。
因此,我们无法使用使用制造商证书签名的系统应用程序关闭设备。所以我的问题是,我应该怎么做?
已编辑
而且,顺便说一句,以防有人不确定:应用程序已正确签名并作为系统应用程序安装,因为我们实际上可以访问一些受限制的 API,例如 PowerManager.goToSleep()