2013-12-08 84 views
3

后不久的Android 4.4出来了我的代码已经正常工作,因为2.2突然灭车。Android的MediaPlayer的错误(1,-2147483648)播放MP3时,本地

我的代码将查询音乐数据库对于一个给定的音乐文件。该路径查询中返回,然后将此路径传递到MediaPlayer的。

代码:

String uri = "content://media/internal/audio/media"; 
String[] columns = [audio_id as _id, title, album, artist, album_id, _data]; 
String where = "album = 'XX'"; 
Cursor c = this.getContentResolver().query(uri, columns, where, null, MediaColumns.TITLE); 
String musicPath = c.getString(5); 
// musicPath is "/storage/emulated/0/Music/The XX/Islands.mp3" 

player.reset(); 
player.setDataSource(musicPath); 
player.setAudioStreamType(AudioManager.STREAM_MUSIC); 
player.prepareAsync(); 

我结束了无用的错误(1,-2147483648)消息,在我的logcat中。

我也试图与

FileInputStream fileInputStream = new FileInputStream(musicPath); 
player.setDataSource(fileInputStream.getFD()); 
fileInputStream.close(); 

更换

player.setDataSource(musicPath); 

但这产生的新的FileInputStream一个FileNotFoundException异常(...):

java.io.FileNotFoundException :/存储/模拟/ 0 /音乐/的xx/Islands.mp3:打开失败:EACCES(拒绝)

这很有趣,因为查询返回的路径开头“/存储/模拟/ ......”但如果我看在Eclipse中的DDMS视图中的实际路径是“到/ mnt /壳/模拟/ ... ”。这是正常的吗?

尽管如此,如果我改变了路径前缀手动我在文件浏览器看到,我还是得到了新的FileInputStream一个FileNotFoundException异常(...):

java.io.FileNotFoundException:/ mnt/shell/emulated/0/Music/XX/Islands.mp3:打开失败:EACCES(权限被拒绝)

同样的例外。什么是这个权限被拒绝的业务?直到KitKat它工作正常。我也因为增加了权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

我的应用程序有这条线在清单:

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> 

有没有人似乎类似的东西,并找到了解决这个未知的错误?我试图在播放音乐和其他音乐播放器应用程序来播放做工精细的MP3歌曲,从而导致我相信这个问题是不缺少的编解码器。

感谢 肖恩

编辑: 我立刻内容的查询后,如果该文件存在检查,返回的路径没有。

File f = new File(musicPath); 
boolean exists = f.exists(); // false 

这怎么可能?我试着查询内部媒体,而不是但不返回任何结果(如预期)

回答

0

我解决此得到了与添加写权限的应用程序的(不幸的)解决方案。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

显然这是必要的从4.4开始。任何人都可以证实或否认这一点?

肖恩

相关问题