2013-09-24 41 views
0

在我的申請,我訪問外部存儲(也可以是內部存儲或根據this SD卡的一部分)通過使用以下方法,在我的Xperia v更高的IT返回內部存儲的路徑(不是SD卡)。得到GALAXY NOTE內部目錄路徑

String root = Environment.getExternalStorageState().toString(); 

當我試圖運行在GALAXY NOTE的應用程序,它不具備一個SD卡安裝,我發現上面的方法不返回存儲路徑。(應用程序應該保存一個文件,如果它獲得成功的道路)。所以我可以知道是否有一種方法可以訪問外部存儲器(沒有安裝SD卡)。

謝謝

+1

「它返回的內部存儲的路徑」 - 沒有,它返回路徑到外部存儲器。請閱讀內部和外部存儲的定義文檔:http://developer.android.com/guide/topics/data/data-storage.html#filesExternal – CommonsWare

+0

我做到了。並且它在某些設備上表示,內部存儲的一部分已被映射爲外部存儲(從內部存儲分區),我的Xperia V具有從內部存儲映射的外部存儲。 – Sajirupee

+0

http://code.google.com/p/android/issues/detail?id=60398 – CommonsWare

回答

1

爲獲得外部存儲路徑嘗試這樣的..

String root = Environment.getExternalStorageDirectory().getPath(); 

它將retun外部存儲的確切路徑

+0

也試過,但它仍然不工作:( – Sajirupee

0

你所有的應用程序必須有權限的第一寫入外部存儲器,它在清單文件中指定,請參閱下面:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

其次,我們應該檢查一下外部介質安裝,請參閱工作片斷從我的Android應用程序之一,將創建外部存儲你的目錄,如果一個已經不存在,否則返回File對象的目錄。

File getRecordingDirectory() 
    { 
     File recordingDir = null; 

      // get the state of external storage 
     String externalStorageState = Environment.getExternalStorageState(); 

     if(externalStorageState.equals(Environment.MEDIA_MOUNTED)) 
     { 
      File extDir = 
        Environment.getExternalStorageDirectory(); 

      recordingDir = new File(extDir, "AudioRecorder"); 

      if(!recordingDir.exists()) 
      { 
       if(!recordingDir.mkdirs()) 
       { 
       Log.e("RECORDER", "Unable to create Silent Recorder recordings directory."); 
       } 
      } 
     } 
     return recordingDir; 
    } 
0
private String getInternalSDPath() { 
    File file = new File("/system/etc/vold.fstab"); 
    FileReader fr = null; 
    BufferedReader br = null; 

    try { 
     fr = new FileReader(file); 
    } catch (FileNotFoundException e) { 

    } 
    String path = null; 
    try { 
     if (fr != null) { 
      br = new BufferedReader(fr); 
      String s = br.readLine(); 
      while (s != null) { 
       if (s.startsWith("dev_mount")) { 
        String[] tokens = s.split("\\s"); 
        path = tokens[2]; // mount_point 
        if (Environment.getExternalStorageDirectory() 
          .getAbsolutePath().equals(path)) { 
         break; 
        } 
       } 
       s = br.readLine(); 
      } 
     } 
    } catch (IOException e) { 

    } finally { 
     try { 
      if (fr != null) { 
       fr.close(); 
      } 
      if (br != null) { 
       br.close(); 
      } 
     } catch (IOException e) { 

     } 
    } 
    return path; 
} 

要獲得外部SD卡安裝目錄根本改變:

    if (Environment.getExternalStorageDirectory() 
          .getAbsolutePath().equals(path)) { 
         break; 
        } 

要:

    if (!Environment.getExternalStorageDirectory() 
          .getAbsolutePath().equals(path)) { 
         break; 
        } 

注:這種方法reather設備特定的和我能使用它,因爲我知道我只針對具有額外內部存儲的三星設備開發憤怒。如果你想讓它適用於所有設備,你將不得不作出額外的改變。