0

このコードを使用して、textView で作成したルールを表示したい。

...................................................

                  public void show(View btn) throws IOException{

                 Show(tv);
                   }


        public final void Show(TextView tv) throws IOException{
            Process Q =Runtime.getRuntime().exec("su -c iptables -L INPUT 1 -n -v --line-numbers ");


             String pingResult="";
            BufferedReader in = new BufferedReader(new
                    InputStreamReader(Q.getInputStream()));
                    String inputLine;

                    while ((inputLine = in.readLine()) != null) {

                           tv.setText(pingResult+="\n"+inputLine+"\n");

                    }
                    in.close();
                                        } 
                                }

問題は、スーパーユーザーのアクセス許可が付与されていることを示していますが、BufferReader を使用したにもかかわらず、テーブルが TextView に表示されないことです。

4

1 に答える 1

0

このコード部分では、必要なことを同じように実行しますが、ディレクトリを一覧表示して入力を読み取ります。このコードを使用して、getRuntime()。execコマンドを変更してみてください。

private String[] GetAppFiles() throws IOException
    {
        int BUFF_LEN =2048;
        Process p = Runtime.getRuntime().exec(new String[]{"su", "-c", "system/bin/sh"});
        DataOutputStream stdin = new DataOutputStream(p.getOutputStream());
        //from here all commands are executed with su permissions
        stdin.writeBytes("ls " + CurrentApkPath + "\n"); // \n executes the command
        InputStream stdout = p.getInputStream();
        byte[] buffer = new byte[BUFF_LEN];
        int read;
        String out = new String();
        //read method will wait forever if there is nothing in the stream
        //so we need to read it in another way than while((read=stdout.read(buffer))>0)
        while(true){
            read = stdout.read(buffer);
            out += new String(buffer, 0, read);
            if(read<BUFF_LEN){
                //we have read everything
                break;
            }
        }

お役に立てば幸いです。

于 2012-12-03T12:45:50.140 に答える