您的位置:首页 > 移动开发 > Android开发

Android 检测是否有ROOT权限

2016-06-14 09:00 411 查看
http://blog.csdn.net/offbye/article/details/7076252

Android (linux)很多命令需要root权限才能执行,比如说查看系统目录文件等,如果我们的程序需要用到查看此类文件或执行系统命令,就必须先获取Root权限。

[java] view
plain copy

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;  

    }  

   

   

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  基础