2013-02-26 2 views
3

У меня проблема с Nexus 10 - 4.2.2. Я тестировал код ниже на Galaxy Tab 10.1 с 4.0.4 и работает нормально:Android - Показать/Скрыть системную панель на 4.2.2 (Nexus 10)

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 системы панели не будет отображаться после того, как раз скрыть.

+0

Я не понимаю, что вы говорите: S, пожалуйста, работайте над грамматикой (кто-то?) – Warpzit

+0

неважно, я только что нашел решение. – goodm

+0

@goodm Я столкнулся с той же проблемой, вы можете обновить код, как вы преодолели проблему. –

ответ

10

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

Hide:

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(); 
    } 
+2

Требуется ли это для Root? –

+1

Как инициализируется envp? Можно ли использовать версию без envp? –

+0

Есть ли какие-то разрешения, которые нужно добавить в манифест? Также нам нужно установить этот APK в системный каталог для работы? Я пытаюсь использовать этот код на kitkat на корневом устройстве, и он, похоже, не работает. Я просто получаю IOException –

4

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

+0

Спасибо, я сейчас обновляю свой sdk, собираюсь проверить его. – goodm

+0

После обновления, если вы используете Eclipse + ADT, вы можете использовать мастер шаблонов для создания этой примерной активности в вашем проекте Android: menu 'File> New> Android> Android Object> Fullscreen Activity' –

+0

Не беспокойтесь об этом, я могу справиться ;) – goodm

2

Ответа на этот вопрос goodm прекрасно работает, но большинство из нас не знают о envp

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

HIDE

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

Вы можете использовать аналогичный для показать.

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