我在平板电脑的SD卡上有一个名为"/Android/data/com.example.android.app/files".的目录我只是手动创建它,因为我不知道如何测试我的应用程序的这一方面。我将文件名存储在sqlite数据库中,如“/folder1/a o1.mp3”、“/folder2/a o1.mp3”等……这些文件具有相同的名称,但位于不同的文件夹中,因为它们是相同的东西是不同的语言。
因此,我从数据库中获取文件名,并尝试使用以下命令访问SD卡上的文件夹:
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/com.example.android.app/files";这基本上就是将路径设置为"storage/Android/data/com.example.android.app/files".
当我把它们放在生鲜的时候,我是这样买的:
rid = getResources().getIdentifier(filname, "raw", "com.example.android.app");现在,对于SD卡上的文件,它更改为:
filename = "/folder1/audio.mp3"而不是“原始”,我有:
"storage/Android/data/com.example.android.app/files"基本上是这样玩的:
AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(rid);
mMP.reset();
mMP.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
mMP.prepare();
mMP.start();
afd.close();然而,所有这些方法现在似乎都不再以同样的方式工作。
您能从SD卡上的mp3文件中获取资源SD吗?这是我现在做这件事的合适方式吗?有没有一种不同的播放方式,无论信号源是内部存储器还是外部存储器,都可以工作?
彻底迷惑了。
编辑:我确实找到了this,它可能只是方程式的help...but。
EDIT2:我正在寻找here。它使用mediastore,我不认为这是我想要的。
发布于 2011-11-06 16:20:51
您无法在SD卡中获取mp3的资源ID,因为此mp3不属于您的项目中的资源文件夹,因此没有资源ID。
来自Android开发人员指南:
编译应用程序时,aapt会生成R类,该类包含res/目录中所有资源的资源in。
为了能够同时从内部存储器和SD卡播放mp3,您可以这样做:
try {
FileDescriptor fd = null;
if (isInInternalMemory(audioFilename)) {
int audioResourceId = mContext.getResources().getIdentifier(audioFilename, "raw", "com.ampirik.audio");
AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(audioResourceId);
fd = afd.getFileDescriptor();
} else if (isInSdCard(audioFilename)) {
File baseDir = Environment.getExternalStorageDirectory();
String audioPath = baseDir.getAbsolutePath() + audioFilename + ".mp3";
FileInputStream fis = new FileInputStream(audioPath);
fd = fis.getFD();
}
if (fd != null) {
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(fd);
mediaPlayer.prepare();
mediaPlayer.start();
}
} catch (Exception e) {
e.printStackTrace();
}这只是一个例子,说明它是如何工作的,显然你应该调整它,指向你的音频文件存储的文件夹,并以适当的方式处理你需要的异常。
编辑:此外,您还可以在此处查看如何从SD卡播放音频的更复杂的示例:https://github.com/ankidroid/Anki-Android/blob/develop/AnkiDroid/src/main/java/com/ichi2/libanki/Sound.java
发布于 2013-09-05 05:59:52
根文件夹路径可以是可变的在安卓设备,例如,它可以是一个设备的/mnt/sdcard和另一个可以是/sdcard/ .therefore你可以使用一个简单的方式解压缩root文件夹使用android.os.Environment.getExternalStorageDirectory();和定义它后,你可以目录指向你的目录在内部或外部的路径,你想要的。例如:( try catch可以由集成开发环境自动生成)
mediaPlayer = new MediaPlayer();
final File root = android.os.Environment.getExternalStorageDirectory();
try {
mediaPlayer.setDataSource(root.getAbsolutePath() + AUDIO_FILES_DIRECTORY+"/musicFile.MP3");
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}https://stackoverflow.com/questions/8022506
复制相似问题