2013-05-22 29 views
8

Trong ứng dụng android tôi cần phải làm:làm thế nào để phân biệt giữa con đường thẻ SD bên trong và bên ngoài trong android

If(removable SdCard is present){ 
    String path=get the path of removable Sdcard() ; 
    //using this path we will create some files in sdcard 
} else{ 
    //display error message 
}    

Để đạt được điều này chúng tôi sử dụng các mã như:

If (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)){ 
       String path= Environment.getExternalStorageDirectory().getPath(); 
} 

Đoạn mã trên không trong một số điện thoại di động Android mới nhất. Xin hãy giúp chúng tôi về điều này.

Dưới đây là các chi tiết về những gì chúng tôi đã cố gắng:

  • Trong điện thoại di động Android có hệ điều hành của ICS và Jellybean, con đường chính xác của sdcard di động khác nhau do nhà sản xuất thiết bị.

Xem bảng dưới đây

Tested Devices OS version removable sdcard path internal sd path 
Samsung galaxy s2 4.0.4 /mnt/sdcard/external_sd /mnt/sdcard 
Samsung S Advance 4.1.2 /storage/extSdCard  /storage/sdcard0 
Samsung Galaxy s3 4.0.4 /mnt/extSdCard   /mnt/sdcard 
Samsung Galaxy Note 4.0.4 /mnt/sdcard/external_sd /mnt/sdcard 

Khi chạy đoạn code trên trong những thiết bị này chúng tôi đã nhận:.

  • Các android API Environment.getExternalStorageDirectory() getPath() chỉ trả về đường dẫn sd nội bộ

  • Cũng là môi trường API.getExternalStorageState() trả về Environment.MEDIA_M OUNTED trong các thiết bị trên mặc dù sdcard bị xóa.

  • Hơn nữa môi trường API.isExternalStorageRemovable() luôn trả về false cho các thiết bị ở trên cho dù sdcard di động có hiện diện hay không.

Chúng tôi đã tìm kiếm trong google và đã thử một số chức năng mà chúng đã cung cấp. Nó chỉ cung cấp danh sách đường dẫn lưu trữ được gắn vào thiết bị.But nó không chỉ ra liệu thẻ nhớ có được xóa hay không.

Chức năng tôi đã cố gắng để có được những đường dẫn lưu trữ:

private static String getMountedPaths(){ 
    String sdcardPath = ""; 
    Runtime runtime = Runtime.getRuntime(); 
    Process proc = null; 
    try { 
     proc = runtime.exec("mount"); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
    InputStream is = proc.getInputStream(); 
    InputStreamReader isr = new InputStreamReader(is); 
    String line; 
    BufferedReader br = new BufferedReader(isr); 
    try { 
     while ((line = br.readLine()) != null) { 
      if (line.contains("secure")) continue; 
      if (line.contains("asec")) continue; 

      if (line.contains("fat")) {//TF card 
       String columns[] = line.split(" "); 
       if (columns != null && columns.length > 1) { 
        mount.add(columns[1]); 
        sdcardPath=columns[1]; 
       } 
      } else if (line.contains("fuse")) {//internal storage 
       String columns[] = line.split(" "); 
       if (columns != null && columns.length > 1) { 
        mount.add(columns[1]); 
       } 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return sdcardPath; 
} 

Có bất kỳ chức năng khác tốt hơn so với ở trên để có được danh sách các đường dẫn lưu trữ trong android? cũng giúp giải quyết vấn đề trên.

+0

i quá có vấn đề tương tự như tôi nghĩ rằng đó là cách tốt nhất để có được con đường của thiết bị bên trong và bên ngoài được như những gì bạn đã làm. Và những gì sai với những điều trên? – Raghunandan

+0

kiểm tra liên kết tại đây. tôi đã sử dụng một mã tương tự như trên http://stackoverflow.com/questions/16637935/a-safe-path-to-external-storage/16638064#16638064 – Raghunandan

+0

"Hơn nữa môi trường API.isExternalStorageRemovable() luôn trả về false cho các thiết bị trên cho dù sdcard di động có mặt hay không. "...... Ý bạn là gì? – xmen

Trả lời

2

Để có được thẻ SD nội

String internalStorage = System.getenv("EXTERNAL_STORAGE"); 
File f_exts = new File(internalStorage); 

Để có được thẻ SD bên ngoài

String externalStorage = System.getenv("SECONDARY_STORAGE"); 
File f_secs = new File(externalStorage); 
+0

hoặc bạn có thể tham khảo liên kết này cũng http://stackoverflow.com/questions/22219312/android-open-external-storage-directorysdcard-for-storing-file liên kết này cũng –

Các vấn đề liên quan