Android Studio中如何使用File Provider实现视频分享?
使用File Provider分享视频的正确实现方案
先梳理你现有代码里的关键问题,再给出修正后的完整流程:
一、现有代码的问题点
- 变量名笔误:分享代码里
imagePath.mkdirs()应为videoPath.mkdirs(),否则会触发空指针或路径找不到的错误。 - 目标文件错误:你在分享时新建了
shared_videos.mp4,但这并非实际要分享的目标视频文件,需指向用户选择的真实视频路径。 - Uri传递方式错误:通过
toString()传递Uri字符串再转回Uri易出问题,应直接传递Uri对象(Uri实现了Parcelable,可直接放入Intent)。 - 缺少临时权限授予:即便Manifest配置了
grantUriPermissions="true",分享Intent仍需添加FLAG_GRANT_READ_URI_PERMISSION,否则接收应用无法访问Uri指向的文件。
二、修正后的步骤
1. 正确传递Uri到目标页面
修改传递逻辑,直接传递Uri对象,无需转成字符串:
final String path = fileslist.get(position).getPath(); String destPath = Environment.getExternalStorageDirectory().getAbsolutePath()+Constant.SAVE_FOLDER_NAME; Intent intent = new Intent(context,Video.class); intent.putExtra("Dest_path_video", destPath); intent.putExtra("File_video", path); intent.putExtra("FileName_video", modalClass.getFileName()); intent.putExtra("Uri_video", modalClass.getUri()); // 直接传递Uri对象 context.startActivity(intent);
2. 在目标页面正确获取Uri
Uri videoUri = getIntent().getParcelableExtra("Uri_video");
3. 修正分享视频的代码
确保指向真实视频文件,添加权限标记,修正变量名:
try { // 获取实际要分享的视频文件 File videoFile = new File(getIntent().getStringExtra("File_video")); // 通过File Provider生成合法Uri Uri shareUri = FileProvider.getUriForFile(this, "com.xyz.fileprovider", videoFile); Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, shareUri); shareIntent.setType("video/*"); // 授予临时读取权限 shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(Intent.createChooser(shareIntent, "Share Via")); } catch (Exception e) { Log.d("test", "分享错误:" + e.getMessage()); }
4. 额外注意事项
- 确保
file_provider_paths.xml的路径覆盖视频文件所在位置:当前配置的<cache-path>仅适配缓存目录下的videos文件夹,若视频在外部存储,需添加对应路径,比如<external-path name="external_videos" path="videos/"/>。 - 若视频在外部存储,低版本Android需提前申请
READ_EXTERNAL_STORAGE权限;Android 10及以上通过File Provider适配时可无需申请。 - 必须指向真实存在的视频文件,禁止通过新建空文件生成Uri,否则分享会直接失败。
内容的提问来源于stack exchange,提问作者Aisha Kumari
相关产品推荐
相关产品推荐

