您的位置:首页 > 运维架构 > Shell

Android中级篇之用JAVA代码执行shell命令

2014-02-11 23:52 666 查看
http://www.linuxidc.com/Linux/2011-12/48958.htm

Android可能有的系统信息没有直接提供API接口来访问,为了获取系统信息时我们就要在用shell指令来获取信息,这时我们可以在代码中来执行命令 ,这里主要用到ProcessBuilder
这个类.

代码部分  :

package com.yin.system_analysis;  
import java.io.File;  
import java.io.IOException;  
import java.io.InputStream;  
import android.app.Activity;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.TextView;  
public class MainActivity extends Activity {  
    private final static String[] ARGS = {"ls","-l"};  
    private final static String TAG = "com.yin.system";  
    Button mButton;  
    TextView myTextView;  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        mButton = (Button) findViewById(R.id.myButton);  
        myTextView = (TextView) findViewById(R.id.textView);  
          
        mButton.setOnClickListener(new OnClickListener() {  
              
            public void onClick(View v) {  
                  
                myTextView.setText(getResult());  
            }  
        });  
    }  
    public String getResult(){  
         ShellExecute cmdexe = new ShellExecute ( );  
         String result="";  
         try {  
            result = cmdexe.execute(ARGS, "/");  
        } catch (IOException e) {  
            Log.e(TAG, "IOException");  
            e.printStackTrace();  
        }  
        return result;  
    }  
    private class ShellExecute {  
        /* 
         * args[0] : shell 命令  如"ls" 或"ls -1"; 
         * args[1] : 命令执行路径  如"/" ; 
         */  
        public String execute ( String [] cmmand,String directory)  
        throws IOException {  
        String result = "" ;  
        try {  
        ProcessBuilder builder = new ProcessBuilder(cmmand);  
          
        if ( directory != null )  
        builder.directory ( new File ( directory ) ) ;  
        builder.redirectErrorStream (true) ;  
        Process process = builder.start ( ) ;  
          
        //得到命令执行后的结果
  
        InputStream is = process.getInputStream ( ) ;  
        byte[] buffer = new byte[1024] ;  
        while ( is.read(buffer) != -1 ) {  
        result = result + new String (buffer) ;  
        }  
        is.close ( ) ;  
        } catch ( Exception e ) {  
            e.printStackTrace ( ) ;  
        }  
        return result ;  
        }  
    }  
}  

布局文件很简单就不列出了   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: