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
相关产品推荐
相关产品推荐

