我想获得系统的状态然后显示一个对话框(此时代码为Toast,以便代码很短)并允许用户根据当前状态安装rw或ro。
我使用了以下代码,但它没有用,我很困惑为什么它不起作用。
File system = new File("/system");
if(system.canWrite()){
Toast.makeText(Utilities.this, "System is RW", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(Utilities.this, "System is RO", Toast.LENGTH_SHORT).show();
}
如何做到这一点?
=============================== EDIT ============ ===================
以下是为未来搜索者解析/ proc / mounts后的最终代码
private boolean readReadWriteFile() {
File mountFile = new File("/proc/mounts");
StringBuilder procData = new StringBuilder();
if(mountFile.exists()) {
try {
FileInputStream fis = new FileInputStream(mountFile.toString());
DataInputStream dis = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(dis));
String data;
while((data = br.readLine()) != null) {
procData.append(data + "\n");
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
if(procData.toString() != null) {
String[] tmp = procData.toString().split("\n");
for(int x = 0; x < tmp.length; x++) {
//Kept simple here on purpose different devices have different blocks
if(tmp[x].contains("/dev/block") && tmp[x].contains("/system")) {
if(tmp[x].contains("rw")) {
Toast.makeText(Activity.this, "System is rw", Toast.LENGTH_LONG).show();
return true;
} else if(tmp[x].contains("ro")) {
Toast.makeText(Activity.this, "System is ro", Toast.LENGTH_LONG).show();
return false;
} else {
return false;
}
}
}
}
}
return false;
}
答案 0 :(得分:1)
那是因为您查询了用户的权限。即使将/system
重新安装为rw
,也不意味着您的应用程序将获得“写入”访问权限。
作为替代解决方案,请阅读/proc/mounts
文件并从那里解析ro
/ rw
状态。