Piszę aplikację zaprojektowaną do pracy na jednym modelu urządzenia (urządzenie z systemem Android, na którym działa oprogramowanie oparte na Amlogic). Mam zarówno funkcję root, jak i moją aplikację podpisano za pomocą certyfikatu oprogramowania układowego.Wyłączyć urządzenie programowo
Moja aplikacja jest głównym celem urządzenia i byłoby pomocne, aby móc rozpocząć pełne wyłączenie. Nie mam komendy . Mam polecenie reboot
.
reboot -p
nie pomaga. Po prostu zamraża urządzenie, pozostając włączone.
PowerManager
jest jeden krok lepiej, ale to ustawia urządzenie w tryb uśpienia, a nie całkowitego wyłączenia:
PowerManager pm = (PowerManager)getSystemService(Service.POWER_SERVICE);
pm.goToSleep(SystemClock.uptimeMillis());
Jestem otwarty na wszelkie sugestie - Hacky lub w inny sposób. Wersja Androida ma pozostać w wersji 4.2.2
.
Intents
To polecenie spowoduje ponowne uruchomienie urządzenia. Intent.ACTION_SHUTDOWN
nie wydaje się nic. Czy ten zamiar może tylko zgłosić zamknięcie, a nie zainicjować?
Intent i = new Intent(Intent.ACTION_REBOOT);
i.putExtra("nowait", 1);
i.putExtra("interval", 1);
i.putExtra("window", 0);
sendBroadcast(i);
Najbardziej szczęście miałem z tym było poprosić o wyłączenie przez Intencyjny:
Intent i = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
i.putExtra("android.intent.extra.KEY_CONFIRM", true);
startActivity(i);
Shutdown Temat
To jest nieco bliżej. Zdecydowanie interesujące. Czy możesz znaleźć przykład użycia tego?
tej pory mają pochodzić z tego: (? Widzisz dlaczego)
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
i beginShutdownSequence
tworzyć NullPointerException
S i rebootOrShutdown
tworzy InvocationTargetException
powodu UnsatisfiedLinkError
... To nie może znaleźć rodem metoda:
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
jest funkcja, że wszystkie funkcje w końcu osiągnąć, gdy skonfigurowany do zamykania (a nie restart). Więc zastanawianie się, jak uniknąć tego błędu połączenia, może być kluczowe.
Pomoże to? http://stackoverflow.com/questions/10411650/how-to-shutdown-an-android-mobile-programatically – hungr
Brak polecenia zamknięcia. Restart powoduje zatrzymanie urządzenia. Menedżer zasilania nie ma możliwości rzeczywistego wyłączenia urządzenia. Tylko spać i restartować. – Knossos
proszę spojrzeć na odpowiedź od Manty i komentarze poniżej, wydaje się, że jest polecenie zamknięcia. – hungr