如何在android中获取媒体文件的Uri?
我想用android中的如何在android中获取媒体文件的Uri?,android,uri,media-player,android-mediaplayer,Android,Uri,Media Player,Android Mediaplayer,我想用android中的MediaPlayer播放一段视频,代码如下: MediaPlayer=newmediaplayer() mmediplayer.setDataSource(this.getContext、mUri、mHeaders) 我有一个本地文件:/storage/simulated/0/Movies/test.mp4,如何获取此文件的mUri 事实上,android.net.Uri有一个方法fromFile(File File),它返回一个Uri,如下所示:file:///sto
MediaPlayer
播放一段视频,代码如下:
MediaPlayer=newmediaplayer()
mmediplayer.setDataSource(this.getContext、mUri、mHeaders)
我有一个本地文件:/storage/simulated/0/Movies/test.mp4
,如何获取此文件的mUri
事实上,android.net.Uri
有一个方法fromFile(File File)
,它返回一个Uri,如下所示:file:///storage/emulated/0/Movies/test.mp4
。但这在setDataSource()
方法中确实有效
更新:
我不想在这个问题上误导别人
事实上,
Uri.parse(“/storage/emulated/0/Movies/test.mp4”)
和Uri.parse(“file:///storage/emulated/0/Movies/test.mp4)
在我的情况下应该没问题。但这只是我的mp4文件的问题只需更改您的文件:/。。。到文件:///它将工作
Uri.parse(uri.toString().replace("file:/", "file:///"));
或者如果你有一个文件,试试看
Uri.parse(String.valueOf(Uri.fromFile(myFile)));
事实上,媒体播放器需要跟随您的文件路径
编辑
我已经回答了一个关于如何使用Uri初始化MediaPlayer的问题
使用上述MRL并按照建议初始化您的播放器,然后欣赏您的视频:)
更新:
我想我应该分享我的部分实现,以便它可以帮助您:
1st
将下面的行添加到您的清单中
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
测试xml的方法可以是
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<SurfaceView
android:id="@+id/surfaceview"
android:layout_width="300dp"
android:layout_height="169dp"
/>
</LinearLayout>
试试这个
String filePath = "file:///storage/emulated/0/Movies/test.mp4"
filePath.replace("file:///", "/"));
MediaPlayer player = MediaPlayer.create(this, Uri.parse(filePath));
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
我提供了原始问题的另一个答案,这可能不适用于@roger稍后描述的特定问题。我发现无需进一步处理/解析媒体文件路径。直接用就行了。例如,我的三星Galaxy手机上有一个本地存储的媒体文件:“/storage/simulated/0/Samsung/Music/Over_the_Horizon.mp3” . 以下简单代码用于播放文件:
String url = "/storage/emulated/0/Samsung/Music/Over_the_Horizon.mp3";
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(url);
mPlayer.prepare();
mPlayer.start();
(我省略了try-catch块和其他非基本代码)。如果在运行代码时发出SecurityException或IOException,则很可能需要在AndroidManifest.xml
文件中的正确位置添加用户权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<application
</application>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>
:)我目前正在构建一个音乐/视频播放器应用程序,而MRL以上的应用程序肯定有效。我正在做一个像你这样的项目,但我在安卓电视上工作。我说的是Uri.parse(String.valueOf(Uri.fromFile(myFile))实际上,媒体播放器不喜欢类似uri的文件:/storage/simulated/0/Movies/test.mp4,而是用类似uri的文件来填充它file:///storage/emulated/0/Movies/test.mp4 ,此文件://后跟/storage。。。叫李先生,我已经看过你的答案了,看起来你在网上放了一段视频,但我想放的是一段本地视频。我尝试了Uri.parse(“file:///storage/emulated/0/Movies/test.mp4“
和Uri.parse(“/storage/emulated/0/Movies/test.mp4”)
,它们也无法成功播放视频。我已更新了答案:)它工作正常。。告诉我你还需要什么file:///storage/emulated/0/Movies/test.mp4“”
无法工作。当然,我也尝试过Uri.parse(“/storage/emulated/0/Movies/test.mp4”)
,它无法工作!
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<application
</application>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>