Удаление Android-навигации и верхней панели,

1

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

Эти команды работают с оболочкой adb

Отключить:

service call activity 42 s16 com.android.systemui

Включить:

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

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

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

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

Любые идеи?

Теги:
kiosk-mode

3 ответа

3
Лучший ответ

Для запуска su 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();
    }
}

Чтобы отключить систему ui, вы можете запустить эту команду

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

Если вы хотите включить back

runCmd("pm enable com.android.systemui && am startservice -n com.android.systemui/.SystemUIService");
  • 0
    Работал отлично! СПАСИБО!
  • 0
    Когда я запускаю эту команду, панель навигации исчезает, но я больше не могу касаться экрана
Показать ещё 2 комментария
0

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

settings put secure user_setup_complete 0
  • 0
    Это не удаляет панель навигации, только отключает кнопку домой.
  • 0
    На моем устройстве все удаляет. Мое приложение в режиме погружения
Показать ещё 1 комментарий
0

Разделить вызов и вызов команды:

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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню