我正在編寫一個旨在運行於特定設備型號(運行基於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