8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

FileProvider 的问题(Android Studio)

Xavier 1月前

18 0

有一小段代码可以启动 http 服务器,该服务器依次监听 url 请求的文件名,然后通过标准播放器运行它,这个实现对于

有一小段代码可以启动 http 服务器,该服务器依次监听 url 对文件名的请求,然后通过标准播放器运行它,这个实现对于 VR 的一个有趣的想法来说是必要的。
但是有一个问题!由于某种原因,FileProvider 生成了以下路径: dat=content://com.example.vrtestvr.fileprovider/external_files/VRvideo/1.mp4 ,播放器分别表示无法缓冲和启动视频,错误代码为 2005,这是为什么?有趣的是,它似乎可以工作,但后来它就停止了 0_0。我不知道该怎么办,告诉我朋友。

代码主要活动:

'private void playVideo(File videoFile) {
    if (!videoFile.exists()) {
        Log.e("VideoFileCheck", "File does not exist: " + videoFile.getAbsolutePath());
        return;
    }

    String mimeType;
    String extension = videoFile.getName().substring(videoFile.getName().lastIndexOf(".") + 1).toLowerCase();
    switch (extension) {
        case "mp4":
            mimeType = "video/mp4";
            break;
        case "mkv":
            mimeType = "video/x-matroska";
            break;
        default:
            mimeType = "video/*"; 
            break;
    }

    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri videoUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", videoFile);
    Log.d("VideoFileCheck", "Video URI: " + videoUri.toString());
    intent.setDataAndType(videoUri, mimeType);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    } else {
        Toast.makeText(this, "No application found to play video", Toast.LENGTH_SHORT).show();
    }
}'
  1. MainActivity.java 链接: https://pastebin.com/4QSD8TzA
  2. AndroidManifest.xml 链接: https://pastebin.com/Wj64BQcj
  3. FilePaths.xml 链接: https://pastebin.com/daqVxR3p

我试过:

  • 我试图在清单中的提供程序中更改某些内容
  • 尝试修复代码
  • 尝试使用 file_paths.xml 但均未成功

决定:我使用直接 file:/// 进行解析,下面我将展示工作代码:

Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //Required for Android 8+
        Uri data = Uri.parse(new File("file://" + videoFile).toString());
        intent.setDataAndType(data, mimeType);
        startActivity(intent);

底线:正常的表演方式( file:/storage/emulated/0/VRvideo/0.mp4 )

帖子版权声明 1、本帖标题:FileProvider 的问题(Android Studio)
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Xavier在本站《kotlin》版块原创发布, 转载请注明出处!
最新回复 (0)
  • Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(contentUri, "video/*");
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    startActivity(intent);
    

    创建 content:// URI 时,您需要向视频播放器授予必要的权限。这可以使用 Intent 标志来完成。

返回
作者最近主题: