2011-05-02 101 views

回答

55

您可以从该代码得到SD卡的路径:

File extStore = Environment.getExternalStorageDirectory(); 

那么对于如指定文件夹名和文件名

"/LazyList/"+serialno.get(position).trim()+".jpg" 
+16

有一个buildin存储是/ storage/sdcard0和一个SD卡,它是/手机中的storage/sdcard1(运行android 4.1.2。)Environment.getExternalStorageDirectory()。getAbsolutePath()return /存储/ sdcard0。有没有办法获得SD卡的路径是/ storage/sdcard1?硬码吗? – rml 2013-06-25 04:02:20

+6

Environment.getExternalStorageDirectory()返回“/ storage/emulated/0”,而我的SDCard实际上居住在“/ storage/extSdCard /” – joshgoldeneagle 2016-01-25 19:19:54

3

通过下面的代码,你可以找到所有音频歌曲文件的名称,路径,大小等所有类型的信息

String[] STAR = { "*" };  
Uri allaudiosong = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
String audioselection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 
Cursor cursor; 
cursor = managedQuery(allaudiosong, STAR, audioselection, null, null); 

if (cursor != null) { 
    if (cursor.moveToFirst()) { 
     do { 
      String song_name = cursor 
        .getString(cursor 
          .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); 
      System.out.println("Audio Song Name= "+song_name); 

      int song_id = cursor.getInt(cursor 
        .getColumnIndex(MediaStore.Audio.Media._ID)); 
      System.out.println("Audio Song ID= "+song_id); 

      String fullpath = cursor.getString(cursor 
        .getColumnIndex(MediaStore.Audio.Media.DATA)); 
      System.out.println("Audio Song FullPath= "+fullpath); 

      String album_name = cursor.getString(cursor 
        .getColumnIndex(MediaStore.Audio.Media.ALBUM)); 
      System.out.println("Audio Album Name= "+album_name); 

      int album_id = cursor.getInt(cursor 
        .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); 
      System.out.println("Audio Album Id= "+album_id); 

      String artist_name = cursor.getString(cursor 
        .getColumnIndex(MediaStore.Audio.Media.ARTIST)); 
      System.out.println("Audio Artist Name= "+artist_name); 

      int artist_id = cursor.getInt(cursor 
        .getColumnIndex(MediaStore.Audio.Media.ARTIST_ID)); 
      System.out.println("Audio Artist ID= "+artist_id); 

     } while (cursor.moveToNext()); 
0

也许你遇到了同样的问题,我的平板电脑上有一个SD卡,在/ mnt/sdcard和外部SD卡在/ mnt/extcard中,你可以在android文件管理器上查看它,去你的SD卡并看到它的路径。

希望它有帮助。

12

这个代码可以轻易得到它............

实际上,在一些设备外部SD卡默认名称显示为extSdCard和其他它是sdcard1。这段代码有助于找出确切路径,并帮助以检索您外部设备的路径..

String sdpath,sd1path,usbdiskpath,sd0path; 

if(new File("/storage/extSdCard/").exists()) 
{ 
    sdpath="/storage/extSdCard/"; 
    Log.i("Sd Cardext Path",sdpath); 
} 
if(new File("/storage/sdcard1/").exists()) 
{ 
    sd1path="/storage/sdcard1/"; 
    Log.i("Sd Card1 Path",sd1path); 
} 
if(new File("/storage/usbcard1/").exists()) 
{ 
    usbdiskpath="/storage/usbcard1/"; 
    Log.i("USB Path",usbdiskpath); 
} 
if(new File("/storage/sdcard0/").exists()) 
{ 
    sd0path="/storage/sdcard0/"; 
    Log.i("Sd Card0 Path",sd0path); 
} 
+1

很好的解决方法,这些都是SD卡的可能名称吗? – 2015-10-16 11:07:08

+1

@SamvelKartashyan当然不是! :)例如,我们有一个SD卡安装在'“/ storage/ext_sd /”',另一个位于“/ mnt/sdcard /”的设备 – Antonio 2015-11-24 10:07:19

9

Environment.getExternalStorageDirectory()返回路径micro SD卡存储

如何从SD卡中的Android

文件路径通过SD卡,我假设,你的意思是可拆卸micro SD卡

在API级别19即Android 4.4版Kitkat中,他们在Context中添加了File[] getExternalFilesDirs (String type),该类允许应用程序将数据/文件存储在micro SD卡中。

Android 4.4是该平台的第一个版本,实际上允许应用程序使用SD卡进行存储。在API级别19之前的任何对SD卡的访问都是通过私有的,不受支持的API实现的。

Environment.getExternalStorageDirectory()在那里从API级别1

getExternalFilesDirs(String type)返回到上的所有共享/外部存储设备应用程序特定的目录绝对路径。这意味着,它将返回到内部和外部存储器的路径。一般来说,第二个返回路径将是microSD卡(如果有)的存储路径。

但值得注意的是,

共享存储可能并不总是可用的,因为可移动媒体 用户弹出。媒体状态可以使用 getExternalStorageState(File)进行检查。

这些文件没有强制执行。例如,任何可以写入这些文件的 应用程序WRITE_EXTERNAL_STORAGE

的内部和外部存储术语根据谷歌/ Android官方文档是从我们所想的完全不同

1

正如有人表示,官方接受的答案不完全返回外部可移动SD卡。我跑了下面的线程,提出了一些我在某些Android设备上测试过的方法,似乎可以可靠地工作,所以我想在这里重新分享,因为我没有在其他响应中看到它:

http://forums.androidcentral.com/samsung-galaxy-s7/668364-whats-external-sdcard-path.html

对paresh996的荣誉提出了答案本身,我可以证明我已经尝试过三星S7和S7edge,似乎工作。

现在,我需要一个方法返回一个有效的路径在哪里读取文件,并认为可能没有外部SD的事实,在这种情况下,应该返回内部存储器,所以我修改了代码paresh996到此:

File getStoragePath() { 
    String removableStoragePath; 
    File fileList[] = new File("/storage/").listFiles(); 
    for (File file : fileList) { 
     if(!file.getAbsolutePath().equalsIgnoreCase(Environment.getExternalStorageDirectory().getAbsolutePath()) && file.isDirectory() && file.canRead()) { 
      return file; 
     } 
    } 
    return Environment.getExternalStorageDirectory(); 
}