2017-01-25 11 views
1

Я пытаюсь реализовать приложение Kiosk на корневом устройстве Android, и мне нужно полностью отключить навигацию и строку состояния.Удаление Android-навигации и topbar,

Эти команды работает с ADB оболочки

Отключить:

service call activity 42 s16 com.android.systemui 

Enable:

am startservice -n com.android.systemui/.SystemUIService 

Это хорошо! Теперь мне нужно сделать это из своего приложения. Поэтому, чтобы отключить, я пробовал:

Process process = Runtime.getRuntime().exec("su service call activity 42 s16 com.android.systemui"); 

при нажатии кнопки в моей деятельности. Но ничего не происходит, и никаких исключений не возникает. Тост всплывает, хотя, говоря, что для приложения были предоставлены права суперпользователя.

Любые идеи?

ответ

3

Для запуска су CMD вы можете использовать этот

public static void runCmd(String cmd) { 
    DataOutputStream os; 
    try { 
     Process process = Runtime.getRuntime().exec("su"); 
     os = new DataOutputStream(process.getOutputStream()); 
     os.writeBytes(cmd + "\n"); 
     os.writeBytes("exit\n"); 
     os.flush(); 
     os.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Для отключения пользовательского интерфейса системы вы можете запустить эту команду

runCmd("pm disable com.android.systemui && service call activity 42 s16 com.android.systemui"); 

Если вы хотите включить обратно

runCmd("pm enable com.android.systemui && am startservice -n com.android.systemui/.SystemUIService"); 
+0

работал отлично! БЛАГОДАРЯ! – Jolle

+0

Когда я запускаю эту команду, панель навигации исчезает, но я больше не могу касаться экрана – alexislg

+0

@alexislg Вы решили эту проблему без касания экрана? Невозможно заставить его работать с API 23+ (Marshmallow) ... –

0

Split су вызов и вызов команды:

try{ 
    Process su = Runtime.getRuntime().exec("su"); 
    DataOutputStream outputStream = new DataOutputStream(su.getOutputStream()); 

    outputStream.writeBytes("service call activity 42 s16 com.android.systemui"); 
    outputStream.flush(); 

    outputStream.writeBytes("exit\n"); 
    outputStream.flush(); 
    su.waitFor(); 
}catch(IOException e){ 
    throw new Exception(e); 
}catch(InterruptedException e){ 
    throw new Exception(e); 
} 
0

С Android 5 и больше, вы можете попробовать этот трюк:

settings put secure user_setup_complete 0 
+0

Это не удаляет навигационную панель, только отключает кнопку« домой ». –

+0

На моем устройстве он удаляет все. Мое приложение находится в режиме погружения – alexislg

+0

О, я вижу это сейчас. Я думал, что это будет работать так же, как «активность вызова службы ...». –