You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用如何接收系统图库视频并在自有应用内播放

问题原因

你在Manifest中注册了两种 Intent 匹配规则,两类动作的媒体数据传递路径完全不同:

  • ACTION_VIEW 动作触发时,媒体URI存储在intent.getData()中
  • 从图库分享触发的ACTION_SEND动作触发时,媒体URI不会存入getData(),而是存储在Extra参数中,这就是你获取到null的核心原因

解决方法

先判断当前触发的Intent动作类型,再对应取值即可,参考代码如下:

Uri playUri = null;
String action = getIntent().getAction();
if (Intent.ACTION_VIEW.equals(action)) {
    playUri = getIntent().getData();
} else if (Intent.ACTION_SEND.equals(action)) {
    // Android 12及以下可以用这个写法
    playUri = getIntent().getParcelableExtra(Intent.EXTRA_STREAM);
    // Android 13及以上推荐用带类型参数的写法避免转换异常:
    // playUri = getIntent().getParcelableExtra(Intent.EXTRA_STREAM, Uri.class);
}

if (playUri != null) {
    // 传入你的Exoplayer实例加载播放即可
}

补充注意项

如果需要长期访问该URI,需要调用以下代码保留访问权限,避免退出应用后重新打开时权限失效:

getContentResolver().takePersistableUriPermission(
    playUri,
    Intent.FLAG_GRANT_READ_URI_PERMISSION
);

内容的提问来源于stack exchange,提问作者ABDELRAHMAN Khaled

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:48:01