2011-05-30 97 views
0

我想獲取系統的狀態,然後顯示一個對話框(此時代碼很短,代碼很短),並允許用戶根據目前的狀態。獲取系統狀態(ro或rw)

我用下面的代碼,但它沒有工作,我很困惑,爲什麼它不工作。

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(); 
} 

這怎麼辦?

===============================編輯============= ==================

下面是解析的/ proc /坐騎後的最終代碼爲未來的搜索

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

回答

1

那是因爲你查詢的權限用戶。即使/system重新安裝爲rw,但這並不意味着您的應用程序將獲得對其的「寫入」訪問權限。

作爲替代解決方案,請閱讀/proc/mounts文件並解析ro/rw狀態。

+0

好主意沒有想到這一點,這應該工作,謝謝一噸的建議 – user577732 2011-05-30 22:30:16