【问题标题】:Android MediaPlayer IOExceptionAndroid MediaPlayer IOException
【发布时间】:2012-08-01 06:09:39
【问题描述】:

我正在编写一个程序,我需要在其中播放存储中的歌曲。我为此设置了一个 MediaPlayer(下面的代码片段),但不断收到 java.io.IOException: Prepare failed.: status=0x1。一些网站表示可能会发生此错误,因为我尝试读取的文件不是世界可读的。如果这是真的,我怎么能从程序中更改文件权限,解决这个问题,或者其他一些解决方案。如果没有,请帮我弄清楚这有什么问题。提前致谢。

MediaPlayer player = new MediaPlayer();
player.reset();
player.setDataSource(selectedFilePath);
player.prepare();
player.start();

【问题讨论】:

    标签: java android android-mediaplayer


    【解决方案1】:

    您试图从哪里读取文件?您可能正在查看 /sdcard/ 区域,而您的应用程序没有读取_external_storage 的能力

    如果是这种情况,只需确保将以下行添加到清单中

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

    [编辑] 我不确定您要从哪里加载,但使用描述符而不是路径可能会有所帮助。看看这是否有帮助:

    FileInputStream fis = new FileInputStream(locationOfFile);
    mediaPlayer.setDataSource(fis.getFD());
    

    如果这仍然没有帮助,我建议您尝试其他文件名以确保您的媒体播放器设置正确。或者你可以做类似的事情

    File thisFile = new File("/storage/sdcard0/Music/song.mp3");
    if (thisFile.exists())
       Log.v("file", "Exists");
    else
       Log.v("file", "Could not be located.");
    

    【讨论】:

    • 路径是“/storage/sdcard0/Music/song.mp3”。它是内部存储器,尽管它似乎被标记为 sdcard。我将它添加到清单中,但仍然没有运气。
    • 我很想知道为什么FileInputStream 比仅仅将路径传递到setDataSource 更可靠,但它确实有效,所以谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多