2014-02-19 2 views
3

Мне нужен мой встроенный планшет Android в режиме «киоск», поэтому панель уведомлений должна быть отключена (а не просто скрыта, например, в полноэкранных играх).Строка уведомления об ошибках

Этот код скрывает строку только временно:

this.requestWindowFeature(Window.FEATURE_NO_TITLE); // Removes title bar 
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,     
WindowManager.LayoutParams.FLAG_FULLSCREEN); 
setContentView(R.layout.main); 

То же самое, когда я поставил этот в раздел приложений AndroidManifest:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 

Я попытался отключить android- ui по команде adb

pm disable com.android.systemui 

Но тогда у меня нет кнопок навигации! Мне нужно только, чтобы панель уведомлений сверху блокировалась!

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

ответ

2

Я знаю, это не общее решение этой проблемы, но в моем случае я мог бы это сделать.
I modded SystemUI.apk.

Я удалил фон строки состояния и установил высоту и ширину в 0dip содержимого.

Это можно сделать только потому, что я обслуживаю свое приложение только для собственного набора таблеток!

2

Насколько я знаю, нет официального способа сделать это, так как его можно использовать злонамеренно, но я так и достиг этого. Он работает, грубо убивая системное обслуживание, которое обрабатывает панель Nav/Action и т. Д. Crude, но это единственное, что я могу найти, что работает.

Это будет блокировать все кнопки навигации, панель действий и т.д. Я не в курсе способ остановить только один из этих

hideNav() называется OnCreate в основной деятельности, и showNav() вызывается из onDestroy, который вам понадобится, если вы хотите, чтобы администратор мог получить доступ к ОС, поскольку, если вы специально не перезапустите службу, вы не сможете перемещаться по устройству.

Мое приложение имеет кнопку выхода, доступную только с паролем. Кнопка вызывает getActivity(). Finish(), которую вам нужно будет вызвать метод onDestroy для этой операции.

ПРИМЕЧАНИЕ. Я прочитал, что на некоторых устройствах системные службы не всегда равны 42, поэтому ваш планшет может нуждаться в другом количестве в команде.

public void hideNav() 
{ 
    Log.v(tag, "hideNav"); 
     try 
     { 
      Process p; 
      p = Runtime.getRuntime().exec("su"); 

      // Attempt to write a file to a root-only 
      DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
      os.writeBytes("service call activity 42 s16 com.android.systemui\n"); 

      // Close the terminal 
      os.writeBytes("exit\n"); 
      os.flush(); 
      p.waitFor(); 

     } 
     catch (Exception e) 
     { 
      Log.e(tag, "hideNav " + e.getMessage()); 
     } 

} 

public void showNav() 
{ 
    Log.v(tag, "showNav"); 

    try{ 
     Process p; 
     p = Runtime.getRuntime().exec("su"); 

     DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
     os.writeBytes("am startservice -n com.android.systemui/.SystemUIService\n"); 

     // Close the terminal 
     os.writeBytes("exit\n"); 
     os.flush(); 
     p.waitFor(); 
    }catch (IOException e) { 
     e.printStackTrace(); 
     Log.e(tag, "showNav " + e.getMessage()); 
    } catch (InterruptedException e) { 
     Thread.currentThread().interrupt(); 
     Log.e(tag, "showNav " + e.getMessage()); 
    } 
} 
+0

По существу это делает то же, что и мой третий фрагмент кода в моем сообщении. Может ли быть способ отключить панель уведомлений? – user2737037

+0

Ах да, я не заметил этого третьего фрагмента. И насколько я знаю, нет возможности отключить только панель уведомлений. Я тоже посмотрел на это, и казалось бы, единственный способ изменить исходный код Android и выпустить планшет с помощью специального ПЗУ. Мне было бы интересно здесь, если есть более простые решения. – CurlyPaul

Смежные вопросы