3

Nexus 10 - 4.2.2 で問題が発生しました。4.0.4 を搭載した Galaxy Tab 10.1 で以下のコードをテストしていましたが、正常に動作していました。

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

3 に答える 3

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();
    }
于 2013-02-27T09:54:56.753 に答える
4

Runtime.exec()その結果を得るために経由でシステムコールを使用するべきではないと思います。テンプレートのコードを見てFullscreenActivityください (ソースは に配置されています<android-sdk-folder>/tools/templates/activities/FullscreenActivity/root): これは、システム バー (上部と下部の両方) をプログラムで表示/非表示にする方法を示す完全な動作例であり、API 13+ のアニメーションもサポートしています。

于 2013-02-27T10:12:13.990 に答える
2

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

ショーにも同様に使用できます。

于 2015-03-22T15:39:36.420 に答える