Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中获取媒体文件的Uri?_Android_Uri_Media Player_Android Mediaplayer - Fatal编程技术网

如何在android中获取媒体文件的Uri?

如何在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

我想用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:///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.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>