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 системная панель не будет отображаться после, просто спрятаться.
3 ответа
Чтобы показать и скрыть системную панель и панель уведомлений в 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+.
Answer by 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();
}
Вы можете использовать подобное для шоу.