无法从Android内部存储播放文件

akk*_*kki 1 android media-player android-mediaplayer

这是setDataSource的字符串

/data/data/com.player/app_player/file.mp3
Run Code Online (Sandbox Code Playgroud)

获取E / Exception:setDataSource失败。

这是代码:

mediaPlayer.setDataSource(context, Uri.parse("/data/data/com.player/app_player/file.mp3"));
Run Code Online (Sandbox Code Playgroud)

我使用此代码存储了该文件

getContext().getDir("player", Context.MODE_PRIVATE)
Run Code Online (Sandbox Code Playgroud)

与/data/data/com.player/app_player相同

使用content://data/data/com.player/app_player/file.mp3无效。

akk*_*kki 5

这就是我解决的方法。

 String musicUrl = "";
 if (songSavedInDB()) {
            musicUrl = "here is any file path(Internal or external)"
            FileInputStream fileInputStream = null;
            try {
                fileInputStream = new FileInputStream(musicUrl);
                mPlayer.setDataSource(fileInputStream.getFD());
                fileInputStream.close();
                mPlayer.prepare();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } else {
            musicUrl = "here is url";
            try {
                mPlayer.setDataSource(getContext(), Uri.parse(musicUrl));
                mPlayer.prepareAsync();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
Run Code Online (Sandbox Code Playgroud)