如何从android中的SD卡获取文件path
嗨,我有在SD卡的MP3文件。 如何从SD卡获取mp3歌曲的文件path。
请帮助我。
你可以从这个代码中获得SD卡的path:
File extStore = Environment.getExternalStorageDirectory();
然后指定文件夹名称和文件名称
例如:
"/LazyList/"+serialno.get(position).trim()+".jpg"
这段代码有助于轻松搞定…………
实际上,在某些设备中,外部SD卡的默认名称显示为extSdCard,其他的是sdcard1。 这段代码有助于找出确切的path,并帮助您找回外部设备的path。
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); }
Environment.getExternalStorageDirectory()
不会返回到微型SD卡存储的path。
如何从android中的SD卡获取文件path
通过SD卡 ,我假设,你的意思是可移动的微型SD卡 。
在API级别19,即在Android 4.4版Kitkat中,他们在Context
Class中添加了File[] getExternalFilesDirs (String type)
,允许应用程序将数据/文件存储在微型SD卡中。
Android 4.4是该平台的第一个版本,实际上允许应用程序使用SD卡进行存储。 在API级别19之前,任何对SD卡的访问都是通过私有的,不受支持的API实现的。
Environment.getExternalStorageDirectory()
从API级别1出现
getExternalFilesDirs(String type)返回所有共享/外部存储设备上特定于应用程序的目录的绝对path。 这意味着,它将返回内部和外部存储器的path。 通常, 第二个返回的path将是microSD卡的存储path(如果有的话)。
但是请注意,
共享存储可能不总是可用的,因为可移动介质可以被用户popup。 媒体状态可以使用
getExternalStorageState(File)
进行检查。这些文件没有强制执行。 例如,任何持有
WRITE_EXTERNAL_STORAGE
应用程序WRITE_EXTERNAL_STORAGE
可以写入这些文件。
根据Google /官方Android文档的内部和外部存储术语与我们所认为的完全不同 。
通过使用下面的代码,您可以find所有audio歌曲文件的所有types的信息的名称,path,大小
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());
正如有些人所说,正式接受的答案并不完全归还外部可移动SD卡。 我跑了下面的线程,提出了一些方法,我已经testing了一些Android设备,似乎可靠地工作,所以我想在这里重新分享,因为我没有看到它在其他响应:
http://forums.androidcentral.com/samsung-galaxy-s7/668364-whats-external-sdcard-path.html
荣誉paresh996提出了答案本身,我可以certificate我已经尝试过三星S7和S7edge,似乎工作。
现在,我需要一个方法返回一个有效的path在哪里读取文件,并考虑到可能没有外部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(); }
也许你有同样的问题,我有,我的平板电脑上有一个SD卡,在/ mnt / sdcard和SD卡外部在/ mnt / extcard,你可以看看它的android文件pipe理器,去你的SD卡,看看它的path。
希望它有帮助。