重新打开应用程序后无法从 uri 播放视频
Can't play video from uri after reopen app
我让用户 select 来自图库的视频,然后我保存视频的 uri 以备将来使用。但是我关闭应用程序并重新打开后,视频无法播放了
这是我用于 select 来自画廊
的视频的意图
private void pickVideoFromGallery() {
Intent opengalleryIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
opengalleryIntent.addCategory(Intent.CATEGORY_OPENABLE);
opengalleryIntent.setType("video/*");
opengalleryIntent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
| Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(opengalleryIntent, RESULT_LOAD_VIDEO);
}
我将视频 uri 保存为字符串
String videoPath = data.getData().toString();
使用:
String videoPath= getIntent().getStringExtra("videoPath"); //From PendingIntent in ForegroundService
viFriendCall.setVideoURI(Uri.parse(videoPath));
viFriendCall.setOnPreparedListener(mp -> mp.setLooping(true));
viFriendCall.start();
这是我收到的错误消息
E/MediaPlayerNative: Unable to create media player
W/VideoView: Unable to open content: content://com.android.providers.media.documents/document/video%3A9922
java.io.IOException: setDataSource failed.: status=0x80000000
at android.media.MediaPlayer.nativeSetDataSource(Native Method)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1209)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1196)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1107)
您必须在 Android 中使用缓存来保存您的数据以备将来使用
房间数据(可用于对象等复杂数据,类):https://developer.android.com/training/data-storage/room
-
你的代码的问题是当用户关闭应用程序时,你初始化的所有变量将从内存中清除,当用户返回应用程序时所有变量将从新鲜
此错误出现在 android 11 及更高版本的设备上。最初承认关闭应用程序后你的uri不再访问file.This是android 11版本的新更新,你可以阅读here
有一种简单的解决方法。如果您想访问该文件供以后在您的应用程序中使用,请将其从原始位置复制到您的应用程序的缓存或文件目录中。
您会在上面找到大量文档。第一次获取文件的 URI 时,只需将文件保存到文件目录中即可。
我让用户 select 来自图库的视频,然后我保存视频的 uri 以备将来使用。但是我关闭应用程序并重新打开后,视频无法播放了 这是我用于 select 来自画廊
的视频的意图private void pickVideoFromGallery() {
Intent opengalleryIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
opengalleryIntent.addCategory(Intent.CATEGORY_OPENABLE);
opengalleryIntent.setType("video/*");
opengalleryIntent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
| Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(opengalleryIntent, RESULT_LOAD_VIDEO);
}
我将视频 uri 保存为字符串
String videoPath = data.getData().toString();
使用:
String videoPath= getIntent().getStringExtra("videoPath"); //From PendingIntent in ForegroundService
viFriendCall.setVideoURI(Uri.parse(videoPath));
viFriendCall.setOnPreparedListener(mp -> mp.setLooping(true));
viFriendCall.start();
这是我收到的错误消息
E/MediaPlayerNative: Unable to create media player
W/VideoView: Unable to open content: content://com.android.providers.media.documents/document/video%3A9922
java.io.IOException: setDataSource failed.: status=0x80000000
at android.media.MediaPlayer.nativeSetDataSource(Native Method)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1209)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1196)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1107)
您必须在 Android 中使用缓存来保存您的数据以备将来使用
房间数据(可用于对象等复杂数据,类):https://developer.android.com/training/data-storage/room
你的代码的问题是当用户关闭应用程序时,你初始化的所有变量将从内存中清除,当用户返回应用程序时所有变量将从新鲜
此错误出现在 android 11 及更高版本的设备上。最初承认关闭应用程序后你的uri不再访问file.This是android 11版本的新更新,你可以阅读here
有一种简单的解决方法。如果您想访问该文件供以后在您的应用程序中使用,请将其从原始位置复制到您的应用程序的缓存或文件目录中。
您会在上面找到大量文档。第一次获取文件的 URI 时,只需将文件保存到文件目录中即可。