私のアプリは、次のような SU アクセスを要求します。
Process p = null;
p = Runtime.getRuntime().exec("su");
これにより、ユーザーはアクセスを許可または拒否するように求められますが、選択肢が画面に表示されている間、アプリは次のコード行を実行し続けます。ユーザーがプロンプトで選択するまでアプリを待機させるにはどうすればよいですか?
これだけで、うまくいくと思います:
Process p = Runtime.exec("foo");
int exitCode = p.waitFor();
プロセスが終了するのを待ち、終了コードも取得します。
@jdourlens ans と同様に、実際の「su」呼び出しの前にこのコードを追加して試すことができます。
try
{
Process p2 = Runtime.getRuntime().exec("su -c ls");
int exitCode = p2.waitFor();
}
catch(Exception e2)
{//do something}
したがって、ユーザーが「常に許可する」オプションを選択すると、うまくいきます。また、コード Chainfires のライブラリと彼のウェブサイトを読み取ろうとしていました: https://github.com/Chainfire/libsuperuser/blob/master/libsuperuser/src/eu/chainfire/libsuperuser/Shell.java
私が理解できたのは、ユーザーがスーパーユーザーアクセスを許可している間にブロッキング I/O 呼び出しを行うことでした。良い方法は、一時ファイルを作成するか、ランダムなコマンドを実行することです。これが私がやろうとしたことです。su を指定して ls を呼び出します。これにより、そのプロセスに su アクセスが許可され、次の su 呼び出しで適切なアクセス権が付与されます。