如何从android中的SD卡获取文件路径

时间:2011-05-02 14:02:19

标签: android

大家好我在sd卡中有mp3文件。如何从SD卡获取mp3歌曲的文件路径。

请帮助我。

7 个答案:

答案 0 :(得分:59)

您可以从以下代码获取SD卡的路径:

File extStore = Environment.getExternalStorageDirectory();

然后指定foldername和文件名

例如:

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

答案 1 :(得分:11)

此代码有助于轻松实现............

实际上在某些设备中,外部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); 
}

答案 2 :(得分:10)

Environment.getExternalStorageDirectory()返回 micro SD卡存储空间的路径。

  

如何从android

中的SD卡获取文件路径

通过 sd card ,我假设,你的意思是可移动micro SD卡

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

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

Environment.getExternalStorageDirectory()来自 API级别1

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

但请注意,

  

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

     

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

根据Google /官方Android文档,内部和外部存储术语与我们的想法相比非常不同

答案 3 :(得分: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());

答案 4 :(得分:1)

正如有些人所指出的那样,官方认可的答案并没有完全归还外部可移动SD卡。我继续讨论以下线程,该线程提出了我在某些Android设备上测试过的方法并且似乎可靠地工作,所以我想在这里重新分享,因为我在其他回复中没有看到它: / p>

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

答案 5 :(得分:0)

也许你有同样的问题,我的平板电脑上面有SD卡,在/ mnt / sdcard上,sd卡外部在/ mnt / extcard,你可以在android文件管理器上查看,继续到您的SD卡并查看它的路径。

希望它有所帮助。

答案 6 :(得分:0)

SD卡有不同的名称。

本规范检查每个可能的名称(我不保证这些都是名称,但包含的名称最多)

它更喜欢主存储。

 private String SDPath() {
    String sdcardpath = "";

    //Datas
    if (new File("/data/sdext4/").exists() && new File("/data/sdext4/").canRead()){
        sdcardpath = "/data/sdext4/";
    }
    if (new File("/data/sdext3/").exists() && new File("/data/sdext3/").canRead()){
        sdcardpath = "/data/sdext3/";
    }
    if (new File("/data/sdext2/").exists() && new File("/data/sdext2/").canRead()){
        sdcardpath = "/data/sdext2/";
    }
    if (new File("/data/sdext1/").exists() && new File("/data/sdext1/").canRead()){
        sdcardpath = "/data/sdext1/";
    }
    if (new File("/data/sdext/").exists() && new File("/data/sdext/").canRead()){
        sdcardpath = "/data/sdext/";
    }

    //MNTS

    if (new File("mnt/sdcard/external_sd/").exists() && new File("mnt/sdcard/external_sd/").canRead()){
        sdcardpath = "mnt/sdcard/external_sd/";
    }
    if (new File("mnt/extsdcard/").exists() && new File("mnt/extsdcard/").canRead()){
        sdcardpath = "mnt/extsdcard/";
    }
    if (new File("mnt/external_sd/").exists() && new File("mnt/external_sd/").canRead()){
        sdcardpath = "mnt/external_sd/";
    }
    if (new File("mnt/emmc/").exists() && new File("mnt/emmc/").canRead()){
        sdcardpath = "mnt/emmc/";
    }
    if (new File("mnt/sdcard0/").exists() && new File("mnt/sdcard0/").canRead()){
        sdcardpath = "mnt/sdcard0/";
    }
    if (new File("mnt/sdcard1/").exists() && new File("mnt/sdcard1/").canRead()){
        sdcardpath = "mnt/sdcard1/";
    }
    if (new File("mnt/sdcard/").exists() && new File("mnt/sdcard/").canRead()){
        sdcardpath = "mnt/sdcard/";
    }

    //Storages
    if (new File("/storage/removable/sdcard1/").exists() && new File("/storage/removable/sdcard1/").canRead()){
        sdcardpath = "/storage/removable/sdcard1/";
    }
    if (new File("/storage/external_SD/").exists() && new File("/storage/external_SD/").canRead()){
        sdcardpath = "/storage/external_SD/";
    }
    if (new File("/storage/ext_sd/").exists() && new File("/storage/ext_sd/").canRead()){
        sdcardpath = "/storage/ext_sd/";
    }
    if (new File("/storage/sdcard1/").exists() && new File("/storage/sdcard1/").canRead()){
        sdcardpath = "/storage/sdcard1/";
    }
    if (new File("/storage/sdcard0/").exists() && new File("/storage/sdcard0/").canRead()){
        sdcardpath = "/storage/sdcard0/";
    }
    if (new File("/storage/sdcard/").exists() && new File("/storage/sdcard/").canRead()){
        sdcardpath = "/storage/sdcard/";
    }
    if (sdcardpath.contentEquals("")){
        sdcardpath = Environment.getExternalStorageDirectory().getAbsolutePath();
    }

    Log.v("SDFinder","Path: " + sdcardpath);
    return sdcardpath;
}