http://blog.youkuaiyun.com/offbye/article/details/7076252
Android (linux)很多命令需要root权限才能执行,比如说查看系统目录文件等,如果我们的程序需要用到查看此类文件或执行系统命令,就必须先获取Root权限。
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import android.app.Activity;
- import android.os.Bundle;
- public class RootActivity extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- DataInputStream stream;
- if(isRooted()){
- try {
- stream = Terminal("ping -c 2 www.pocketdigi.com");
- //其实ping并不需要root权限 ,这里是ping 2次后才停止,所以启动后需要一点时间才会有显示
- //你可以自己换成需要root权限的命令试试
- String temp;
- while((temp=stream.readLine())!=null){
- System.out.println(temp);
- //循环输出返回值
- }
- } catch (Exception e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- }
- }
- public DataInputStream Terminal(String command) throws Exception
- {
- Process process = Runtime.getRuntime().exec("su");
- //执行到这,Superuser会跳出来,选择是否允许获取最高权限
- OutputStream outstream = process.getOutputStream();
- DataOutputStream DOPS = new DataOutputStream(outstream);
- InputStream instream = process.getInputStream();
- DataInputStream DIPS = new DataInputStream(instream);
- String temp = command + "\n";
- //加回车
- DOPS.writeBytes(temp);
- //执行
- DOPS.flush();
- //刷新,确保都发送到outputstream
- DOPS.writeBytes("exit\n");
- //退出
- DOPS.flush();
- process.waitFor();
- return DIPS;
- }
- public boolean isRooted() {
- //检测是否ROOT过
- DataInputStream stream;
- boolean flag=false;
- try {
- stream = Terminal("ls /data/");
- //目录哪都行,不一定要需要ROOT权限的
- if(stream.readLine()!=null)flag=true;
- //根据是否有返回来判断是否有root权限
- } catch (Exception e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- return flag;
- }
- }