Android – Показать / Скрыть системную панель на 4.2.2 (Nexus 10)

У меня проблема с Nexus 10 – 4.2.2. Я тестировал код ниже на Galaxy Tab 10.1 с 4.0.4, и он работал нормально:

try { Process proc = Runtime.getRuntime().exec(new String[]{"sh","startservice","-n","com.android.systemui/.SystemUIService"}); proc.waitFor(); } catch (Exception e) { e.printStackTrace(); } try { //REQUIRES ROOT Process proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 42 s16 com.android.systemui"}); //WAS 79 proc.waitFor(); } catch(Exception ex) { //Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); } 

Но на Nexus 10 системная панель не будет отображаться после, просто спрятаться.

Чтобы показать и скрыть панель управления и панель уведомлений на 4.2.2 и другие:

Спрятать:

  try { String command; command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib service call activity 42 s16 com.android.systemui"; Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command }, envp); proc.waitFor(); } catch(Exception ex) { Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); } 

Показать:

  try { String command; command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib am startservice -n com.android.systemui/.SystemUIService"; Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command }, envp); proc.waitFor(); } catch (Exception e) { e.printStackTrace(); } 

Я думаю, вы не должны использовать системные вызовы через Runtime.exec() чтобы получить этот результат. Вы должны посмотреть на код в шаблоне FullscreenActivity (источники размещаются в <android-sdk-folder>/tools/templates/activities/FullscreenActivity/root ): это полный рабочий пример, показывающий, как показывать / скрывать системные бары (оба И нижний) программно, и даже поддерживает анимацию для API 13+.

Ответ goodm отлично работает, но большинство из нас не знает об envp

Итак, вот полный код:

СКРЫВАТЬ

 try { String command; command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib service call activity 42 s16 com.android.systemui"; ArrayList<String> envlist = new ArrayList<String>(); Map<String, String> env = System.getenv(); for (String envName : env.keySet()) { envlist.add(envName + "=" + env.get(envName)); } String[] envp = (String[]) envlist.toArray(new String[0]); Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command }, envp); proc.waitFor(); } catch(Exception ex) { Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); } 

Вы можете использовать похожие для шоу.