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 { -
-
@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; -
} -
-
- }