我正在编写一个旨在运行于特定设备型号(运行基于Amlogic的固件的Android机顶盒设备)上的应用程序。我有两个root权限,我的应用程序使用固件证书签名。以编程方式关闭设备
我的应用程序是该设备的主要重点,它可以帮助启动完整的关机。
我没有shutdown
命令。我有reboot
命令。
reboot -p
没有帮助。它只是在开机时冻结设备。
的PowerManager
是一步到位,但该设备将进入休眠模式,而不是完全关闭:
PowerManager pm = (PowerManager)getSystemService(Service.POWER_SERVICE);
pm.goToSleep(SystemClock.uptimeMillis());
我向所有人开放的建议 - 哈克或以其他方式。 Android的版本预计保持在4.2.2
。
意图
此命令将导致设备重新启动。 Intent.ACTION_SHUTDOWN
似乎没有做任何事情。这是意图也许只是报告关闭,而不是启动一个?
Intent i = new Intent(Intent.ACTION_REBOOT);
i.putExtra("nowait", 1);
i.putExtra("interval", 1);
i.putExtra("window", 0);
sendBroadcast(i);
最幸运我有,这是由意向请关机:
Intent i = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
i.putExtra("android.intent.extra.KEY_CONFIRM", true);
startActivity(i);
关闭线程
这是一个有点接近。绝对有趣。你能找到一个使用它的例子吗?
到目前为止,我想出了这一点:(?你知道为什么)
Class<?> sdClass = Class.forName("com.android.server.power.ShutdownThread");
Constructor<?> con = sdClass.getDeclaredConstructors()[0];
con.setAccessible(true);
for (Method m : sdClass.getDeclaredMethods()) {
if (m.getName().matches("shutdown")) {
m.setAccessible(true);
m.invoke(sdClass, PlayerActivity.this, false);
} else if (m.getName().matches("rebootOrShutdown")) {
m.setAccessible(true);
m.invoke(sdClass, PlayerActivity.this, false);
} else if (m.getName().matches("beginShutdownSequence")) {
m.setAccessible(true);
m.invoke(sdClass, PlayerActivity.this, false);
}
}
shutdown
和beginShutdownSequence
创建NullPointerException
S和rebootOrShutdown
创建InvocationTargetException
由于UnsatisfiedLinkError
......它找不到本地方法:
java.lang.UnsatisfiedLinkError: Native method not found: com.android.server.power.PowerManagerService.nativeShutdown:()V at com.android.server.power.PowerManagerService.nativeShutdown(Native Method) at com.android.server.power.PowerManagerService.lowLevelShutdown(PowerManagerService.java:2163) at com.android.server.power.ShutdownThread.rebootOrShutdown(ShutdownThread.java:543) at com.android.server.power.ShutdownThread.run(ShutdownThread.java:393)
lowLevelShutdown
是当被配置成关闭功能,所有的功能最终达到,(而不是重新启动)。因此,弄清楚如何避免这种链接错误可能是关键。
这帮助你吗? http://stackoverflow.com/questions/10411650/how-to-shutdown-an-android-mobile-programatically – hungr
不。关机命令丢失。重新启动会冻结设备。电源管理器无法实际关闭设备。只有睡眠和重新启动。 – Knossos
请看看Manty的回答和下面的评论,似乎有关机命令。 – hungr