后不久的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
这怎么可能?我试着查询内部媒体,而不是但不返回任何结果(如预期)