Мое приложение является основной функцией устройства, и было бы полезно иметь возможность инициировать полное выключение.
У меня нет команды выключения. У меня есть команда перезагрузки.
Код: Выделить всё
reboot -pPowerManager на шаг лучше, но вместо полного выключения устройства переводит устройство в спящий режим:
Код: Выделить всё
PowerManager pm = (PowerManager)getSystemService(Service.POWER_SERVICE);
pm.goToSleep(SystemClock.uptimeMillis());
Намерения
Эта команда приведет к перезагрузке устройства. 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);
}
}
Код: Выделить всё
shutdownjava.lang.UnsatisfiedLinkError: Собственный метод не найден:
com.android.server.power.PowerManagerService.nativeShutdown:()V в
com.android.server.power.PowerManagerService.nativeShutdown(собственный
метод) в
com.android.server.power.PowerManagerService.lowLevelShutdown(PowerManagerService.java:2163)
в
com.android.server.power.ShutdownThread.rebootOrShutdown(ShutdownThread.java:543)
на
com.android.server.power.ShutdownThread.run(ShutdownThread.java:393)
Код: Выделить всё
lowLevelShutdownПодробнее здесь: https://stackoverflow.com/questions/246 ... mmatically
Мобильная версия