2015-01-20 15 views
8

użyłem tej odpowiedzi w celu uzyskania trybu Kiosk dla mojej aplikacji: https://stackoverflow.com/a/26013850Czy mogę wyłączyć systemi z poziomu mojej aplikacji na Androida?

I zakorzenione tablet z Kingo root, a następnie wykonywane są następujące polecenia:

adb shell > 
su > 
pm disable com.android.systemui > 

buduję aplikację, która będzie tylko używane na naszych urządzeniach jako kioski ....

Działa świetnie, ALE .. Chciałbym wyłączyć i uaktywnić systemowy interfejs użytkownika z samej aplikacji Android.

Czy polecenia systemowe są możliwe z poziomu aplikacji?

+0

Czy można bezpiecznie wyłączyć com.android.systemui, czy na niektórych urządzeniach może się zdarzyć coś złego? – JohnyTex

+2

@JohnyTex: Jest to wyjątkowy przypadek, w którym potrzebowałem użytkownikom NIE mieć możliwości robienia niczego poza użyciem mojej aplikacji. Urządzenie należało do mojej firmy i zostało umieszczone w kioskach. Dzięki temu prawie niemożliwe było zamknięcie aplikacji, w której się znajdowałeś, ponieważ nie było już przycisku powrotu do domu, przycisku wstecz ani powiadomienia. – silversunhunter

+0

Doszedłem do sytuacji, w której wyłączenie systemu nie pomogło - i tak działało, mimo że zostało wyłączone. Zobacz: http://android.stackexchange.com/questions/119508/app-is-running-even-though-disabled-why Jak może działać, gdy jest wyłączony? – JohnyTex

Odpowiedz

14
/** 
* Uses Root access to enable and disable SystemUI. 
* @param enabled Decide whether to enable or disable. 
*/ 
public void setSystemUIEnabled(boolean enabled){ 
    try { 
     Process p = Runtime.getRuntime().exec("su"); 
     DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
     os.writeBytes("pm " + (enabled ? "enable" : "disable") 
       + " com.android.systemui\n"); 
     os.writeBytes("exit\n"); 
     os.flush(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Działa prawidłowo. Użycie:

setSystemUIEnabled(true); // Enable SystemUI 
setSystemUIEnabled(false); // Disable SystemUI 
+0

Mam zamiar spróbować, ale mam jedno pytanie. Ponieważ używam oprogramowania root dla manekinów (dostęp do roota z jednym kliknięciem), zastanawiam się, czy istnieje sposób dla tej klasy, aby wiedzieć, czy ma uprawnienia administratora, czy nie. – silversunhunter

+0

Jeszcze jedno pytanie: czy powinno być (boolean "włączony") ??? – silversunhunter

+1

Możesz użyć tej funkcji, wywołując setSystemUIEnabled (true); gdzieś w kodzie. Właśnie to przetestowałem, działając dobrze. Determinung, jeśli istnieje root access jest wyjaśniony [tutaj] (http://stackoverflow.com/a/8097801/4193263). Proszę przyjąć tę odpowiedź, jeśli ci to pomoże. – ByteHamster

Powiązane problemy