这是我将blob转换为mp3的功能:
private void convertByyeToMP3(byte[] bytearray,String trackName) {
try {
ContextWrapper c = new ContextWrapper(getApplicationContext());
File directory = new File(c.getFilesDir().getAbsolutePath()
+ "/Music");
if (!directory.exists()){
directory.mkdir();
}
File tempMp3 = File.createTempFile(trackName, ".mp3",
directory);
FileOutputStream fos = new FileOutputStream(tempMp3);
fos.write(bytearray);
fos.close();
Log.d("Byte array to mp3 conversion: ", "successfull");
} catch (Exception ex) {
Log.d("In convertToByteToMp3 Function:", ex.toString());
}
}
当我执行此功能时,我可以在我的app文件夹中看到创建的mp3文件,但是当我尝试播放它们时使用我自己的代码或使用ES文件资源管理器,它们都无法播放。
这是我用来播放音乐的功能:
private MediaPlayer mp = new MediaPlayer();
private void playSong(String songPath) {
try {
mp.reset();
mp.setDataSource(songPath);
mp.prepare();
mp.start();
} catch (IOException e) {
Log.v(getString(R.string.app_name), e.getMessage());
}
}
我使用此示例代码播放曲目:
ContextWrapper c = new ContextWrapper(getApplicationContext());
File directory = new File(c.getFilesDir().getAbsolutePath() + "/Music");
playSong(directory.getPath() + File.separator + "kurchina");
这是我读取数据库并发送blob的地方:
cursor = mDbHelper.GetTables();
byte[] blob = null;
DATAS data = new DATAS();
while (cursor.moveToNext()) {
blob = cursor.getBlob(cursor.getColumnIndex("data"));
if (blob != null) {convertByyeToMP3(blob,data_MusicName);}
db.addDATAS(data);
}
仅供参考:
- 添加到清单的读取和写入权限。
- 检查路径和文件名,它们存在
-blob字节未损坏
答案 0 :(得分:1)
在您向我们展示的代码或其他地方,有各种各样的问题可能出错。所以你需要自己进行故障排除。有条不紊。
找出问题与您提取的歌曲文件或播放方式有关。例如,尝试使用独立的mp3播放器实用程序播放提取的文件。
假设问题是提取的文件,接下来要弄清楚文件是否与最初插入数据库的文件相同。使用相关的外部应用程序比较文件大小和校验和。
等等。
答案 1 :(得分:1)
发现问题。
它没有播放,因为音乐文件存储在我的app文件夹中,只能使用root设备访问。
当我将音乐复制到我的SD卡时,它们播放得很好,但是在使用root用nexus 7的app文件夹中,即使使用mp3播放器应用也无法播放它。