2011-07-23 7 views

答えて

5

まず必要なシェルコマンドは、Androidで実際に利用可能であることを確認してください。私は>と出力をリダイレクトするなどの作業を行うことができると仮定して問題にぶつかりました。

この方法は、私がv2.2を信じている根付いていない電話機でも機能しますが、APIリファレンスで確認してください。それはおそらく100%必要はありませんが

try { 
     Process chmod = Runtime.getRuntime().exec("/system/bin/chmod 777 " +fileName); 

     BufferedReader reader = new BufferedReader(
       new InputStreamReader(nfiq.getInputStream())); 
     int read; 
     char[] buffer = new char[4096]; 
     StringBuffer output = new StringBuffer(); 
     while ((read = reader.read(buffer)) > 0) { 
      output.append(buffer, 0, read); 
     } 
     reader.close(); 
     chmod.waitFor(); 
     outputString = output.toString(); 
    } catch (IOException e) { 
     throw new RuntimeException(e); 
    } catch (InterruptedException e) { 
     throw new RuntimeException(e); 
    } 

は、それはあなたが出力を気にすることを言ったので、幹部はprocess.waitFor()で完了させるための処理待ちを持つことをお勧めします。

+0

いくつかのコマンドはこのように動作します(topなど)。しかし、他のコマンドは、adbシェルからコマンドを実行したときにターミナルに出力しても空文字列を返します。例えば。プロセス= Runtime.getRuntime()。exec( "/ system/bin/ping");入力ストリームに何もない理由は何ですか? –

+1

ああ、2つの別々の問題。私はreadLine()を使って 'top'の出力を取得していましたが、 'top'の出力の最初の文字は改行文字ですので、空の文字列を説明しています。もう1つは、「ping」がエラーを生成していて、getInputStream()の代わりにgetErrorStream()にあったことです。すべては今うまいです:) –

2

最も一般的に使用されているシェルコマンドのリストをインストールするようにビジーボックスがインストールされていることを確認してから、次のコードを使用してコマンドを実行する必要があります。

Runtime.getRuntime().exec("ls"); 
関連する問題