[英]My app won't show up on the chooser dialog for android.intent.action.VIEW with mime type video/* only on Marshmallow
Basically when an app shares a video url my app is supposed to show up on the list but it doesn't. 基本上,当一个应用程序共享一个视频网址时,我的应用程序应该显示在列表中,但事实并非如此。 Neither does MXPlayer but the Google Photos media player shows up fine as well as allcast (which had a recent release to fix this). MXPlayer和谷歌照片媒体播放器都没有显示好和全播(最近有一个版本来解决这个问题)。
I wrote a quick app to test this issue, here are my manifest filters: 我写了一个快速的应用来测试这个问题,这里是我的清单过滤器:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="video/*"/>
<data android:mimeType="audio/*"/>
<data android:mimeType="image/*"/>
<action android:name="android.intent.action.SEND"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:mimeType="video/*" android:scheme="http"/>
<data android:mimeType="audio/*" android:scheme="http"/>
<data android:mimeType="image/*" android:scheme="http"/>
<data android:mimeType="video/*" android:scheme="https"/>
<data android:mimeType="audio/*" android:scheme="https"/>
<data android:mimeType="image/*" android:scheme="https"/>
<data android:mimeType="video/*" android:scheme="file"/>
<data android:mimeType="audio/*" android:scheme="file"/>
<data android:mimeType="image/*" android:scheme="file"/>
<action android:name="android.intent.action.VIEW"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="*" android:pathPattern=".*\\.mp4" android:scheme="http"/>
<action android:name="android.intent.action.VIEW"/>
</intent-filter>
And this is the code to reproduce the issue: 这是重现问题的代码:
Intent intent = new Intent("android.intent.action.VIEW");
intent.setDataAndType(Uri.parse("http://media.w3.org/2010/05/sintel/trailer.mp4"),"video/*");
startActivity(intent);
This is only an issue on Marshmallow. 这只是Marshmallow的一个问题。
EDIT: I should add that not all Marshmallow devices do this. 编辑:我应该补充一点,并非所有棉花糖设备都这样做。 It took me a long time to reproduce it from the first time I heard about it and one day it just started happening on my Nexus 5. My 6P won't reproduce this. 我第一次听说它时花了很长时间才重现它,有一天它刚刚开始在我的Nexus 5上发生。我的6P将无法重现这一点。
EDIT: I added some debugging code prior to startActivity
. 编辑:我在startActivity
之前添加了一些调试代码。 Basically I'm asking the package manager to give me the intent activities that can handle that intent and I get back the exact same list I see on the dialog. 基本上我要求包管理器给我能够处理该意图的意图活动,然后我回到我在对话框中看到的完全相同的列表。
PackageManager manager = getBaseContext().getPackageManager();
List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0);
if (infos.size() > 0) {
//THE INFOS LIST HAS THE 3 APPS THAT IT SHOWS BUT MINE IS MISSING
}else{
}
EDIT: I figured adding screenshots might make it more clear. 编辑:我认为添加截图可能会更清楚。
This is on my Nexus 5 with 6.0.1, the list is fully expanded 这是在我的Nexus 5 6.0.1上,该列表已完全扩展
This is on my Nexus 4 with 5.1.1, list also fully expanded 这是我的Nexus 4和5.1.1,列表也完全扩展
Both phones have pretty much the exact same apps. 这两款手机都有完全相同的应用程序。
Fixed it! 固定它! All I had to do was remove <category android:name="android.intent.category.BROWSABLE"/>
我所要做的就是删除<category android:name="android.intent.category.BROWSABLE"/>
Try the following for your intent-filters 请尝试以下方法进行意图过滤
<activity >
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="rtmp"/>
<data android:scheme="rtmpe"/>
<data android:scheme="rtmps"/>
<data android:scheme="rtp"/>
<data android:scheme="rtsp"/>
<data android:scheme="mms"/>
<data android:scheme="mmsh"/>
<data android:scheme="icyx"/>
<data android:scheme="httplive"/>
<data android:scheme="udp"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:mimeType="video/*"/>
<data android:mimeType="audio/*"/>
<data android:mimeType="image/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme=""/>
<data android:scheme="file"/>
<data android:scheme="ftp"/>
<data android:scheme="content"/>
<data android:scheme="http"/>
<data android:scheme="https"/>
<data android:mimeType="video/*"/>
<data android:mimeType="audio/*"/>
<data android:mimeType="*/rmvb"/>
<data android:mimeType="*/avi"/>
<data android:mimeType="*/mkv"/>
<data android:mimeType="application/3gpp*"/>
<data android:mimeType="application/mp4"/>
<data android:mimeType="application/mpeg*"/>
<data android:mimeType="application/ogg"/>
<data android:mimeType="application/sdp"/>
<data android:mimeType="application/vnd.3gp*"/>
<data android:mimeType="application/vnd.apple.mpegurl"/>
<data android:mimeType="application/vnd.dvd*"/>
<data android:mimeType="application/vnd.dolby*"/>
<data android:mimeType="application/vnd.rn-realmedia*"/>
<data android:mimeType="application/x-iso9660-image"/>
<data android:mimeType="application/x-extension-mp4"/>
<data android:mimeType="application/x-flac"/>
<data android:mimeType="application/x-matroska"/>
<data android:mimeType="application/x-mpegURL"/>
<data android:mimeType="application/x-ogg"/>
<data android:mimeType="application/x-quicktimeplayer"/>
<data android:mimeType="application/x-shockwave-flash"/>
<data android:mimeType="application/xspf+xml"/>
<data android:mimeType="misc/ultravox"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme=""/>
<data android:scheme="file"/>
<data android:scheme="ftp"/>
<data android:scheme="content"/>
<data android:scheme="http"/>
<data android:scheme="https"/>
<data android:host="*"/>
<data android:pathPattern=".*\\.3g2"/>
<data android:pathPattern=".*\\.3gp"/>
<data android:pathPattern=".*\\.3gp2"/>
<data android:pathPattern=".*\\.3gpp"/>
<data android:pathPattern=".*\\.amv"/>
<data android:pathPattern=".*\\.asf"/>
<data android:pathPattern=".*\\.avi"/>
<data android:pathPattern=".*\\.divx"/>
<data android:pathPattern=".*\\.drc"/>
<data android:pathPattern=".*\\.dv"/>
<data android:pathPattern=".*\\.f4v"/>
<data android:pathPattern=".*\\.flv"/>
<data android:pathPattern=".*\\.gvi"/>
<data android:pathPattern=".*\\.gxf"/>
<data android:pathPattern=".*\\.ismv"/>
<data android:pathPattern=".*\\.iso"/>
<data android:pathPattern=".*\\.m1v"/>
<data android:pathPattern=".*\\.m2v"/>
<data android:pathPattern=".*\\.m2t"/>
<data android:pathPattern=".*\\.m2ts"/>
<data android:pathPattern=".*\\.m3u8"/>
<data android:pathPattern=".*\\.mkv"/>
<data android:pathPattern=".*\\.mov"/>
<data android:pathPattern=".*\\.mp2"/>
<data android:pathPattern=".*\\.mp2v"/>
<data android:pathPattern=".*\\.mp4"/>
<data android:pathPattern=".*\\.mp4v"/>
<data android:pathPattern=".*\\.m4v"/>
<data android:pathPattern=".*\\.mpe"/>
<data android:pathPattern=".*\\.mpeg"/>
<data android:pathPattern=".*\\.mpeg1"/>
<data android:pathPattern=".*\\.mpeg2"/>
<data android:pathPattern=".*\\.mpeg4"/>
<data android:pathPattern=".*\\.mpg"/>
<data android:pathPattern=".*\\.mpv2"/>
<data android:pathPattern=".*\\.mts"/>
<data android:pathPattern=".*\\.mtv"/>
<data android:pathPattern=".*\\.mxf"/>
<data android:pathPattern=".*\\.mxg"/>
<data android:pathPattern=".*\\.nsv"/>
<data android:pathPattern=".*\\.nut"/>
<data android:pathPattern=".*\\.nuv"/>
<data android:pathPattern=".*\\.ogm"/>
<data android:pathPattern=".*\\.ogv"/>
<data android:pathPattern=".*\\.ogx"/>
<data android:pathPattern=".*\\.ps"/>
<data android:pathPattern=".*\\.rec"/>
<data android:pathPattern=".*\\.rm"/>
<data android:pathPattern=".*\\.rmvb"/>
<data android:pathPattern=".*\\.tod"/>
<data android:pathPattern=".*\\.ts"/>
<data android:pathPattern=".*\\.tts"/>
<data android:pathPattern=".*\\.vob"/>
<data android:pathPattern=".*\\.vro"/>
<data android:pathPattern=".*\\.webm"/>
<data android:pathPattern=".*\\.wm"/>
<data android:pathPattern=".*\\.wmv"/>
<data android:pathPattern=".*\\.wtv"/>
<data android:pathPattern=".*\\.xesc"/>
<data android:pathPattern=".*\\.3G2"/>
<data android:pathPattern=".*\\.3GP"/>
<data android:pathPattern=".*\\.3GP2"/>
<data android:pathPattern=".*\\.3GPP"/>
<data android:pathPattern=".*\\.AMV"/>
<data android:pathPattern=".*\\.ASF"/>
<data android:pathPattern=".*\\.AVI"/>
<data android:pathPattern=".*\\.DIVX"/>
<data android:pathPattern=".*\\.DRC"/>
<data android:pathPattern=".*\\.DV"/>
<data android:pathPattern=".*\\.F4V"/>
<data android:pathPattern=".*\\.FLV"/>
<data android:pathPattern=".*\\.GVI"/>
<data android:pathPattern=".*\\.GXF"/>
<data android:pathPattern=".*\\.ISMV"/>
<data android:pathPattern=".*\\.ISO"/>
<data android:pathPattern=".*\\.M1V"/>
<data android:pathPattern=".*\\.M2V"/>
<data android:pathPattern=".*\\.M2T"/>
<data android:pathPattern=".*\\.M2TS"/>
<data android:pathPattern=".*\\.M3U8"/>
<data android:pathPattern=".*\\.MKV"/>
<data android:pathPattern=".*\\.MOV"/>
<data android:pathPattern=".*\\.MP2"/>
<data android:pathPattern=".*\\.MP2V"/>
<data android:pathPattern=".*\\.MP4"/>
<data android:pathPattern=".*\\.MP4V"/>
<data android:pathPattern=".*\\.M4V"/>
<data android:pathPattern=".*\\.MPE"/>
<data android:pathPattern=".*\\.MPEG"/>
<data android:pathPattern=".*\\.MPEG1"/>
<data android:pathPattern=".*\\.MPEG2"/>
<data android:pathPattern=".*\\.MPEG4"/>
<data android:pathPattern=".*\\.MPG"/>
<data android:pathPattern=".*\\.MPV2"/>
<data android:pathPattern=".*\\.MTS"/>
<data android:pathPattern=".*\\.MTV"/>
<data android:pathPattern=".*\\.MXF"/>
<data android:pathPattern=".*\\.MXG"/>
<data android:pathPattern=".*\\.NSV"/>
<data android:pathPattern=".*\\.NUT"/>
<data android:pathPattern=".*\\.NUV"/>
<data android:pathPattern=".*\\.OGM"/>
<data android:pathPattern=".*\\.OGV"/>
<data android:pathPattern=".*\\.OGX"/>
<data android:pathPattern=".*\\.PS"/>
<data android:pathPattern=".*\\.REC"/>
<data android:pathPattern=".*\\.RM"/>
<data android:pathPattern=".*\\.RMVB"/>
<data android:pathPattern=".*\\.TOD"/>
<data android:pathPattern=".*\\.TS"/>
<data android:pathPattern=".*\\.TTS"/>
<data android:pathPattern=".*\\.VOB"/>
<data android:pathPattern=".*\\.VRO"/>
<data android:pathPattern=".*\\.WEBM"/>
<data android:pathPattern=".*\\.WM"/>
<data android:pathPattern=".*\\.WMV"/>
<data android:pathPattern=".*\\.WTV"/>
<data android:pathPattern=".*\\.XESC"/>
<data android:pathPattern=".*\\.3ga"/>
<data android:pathPattern=".*\\.a52"/>
<data android:pathPattern=".*\\.aac"/>
<data android:pathPattern=".*\\.ac3"/>
<data android:pathPattern=".*\\.adt"/>
<data android:pathPattern=".*\\.adts"/>
<data android:pathPattern=".*\\.aif"/>
<data android:pathPattern=".*\\.aifc"/>
<data android:pathPattern=".*\\.aiff"/>
<data android:pathPattern=".*\\.amr"/>
<data android:pathPattern=".*\\.aob"/>
<data android:pathPattern=".*\\.ape"/>
<data android:pathPattern=".*\\.awb"/>
<data android:pathPattern=".*\\.caf"/>
<data android:pathPattern=".*\\.dts"/>
<data android:pathPattern=".*\\.flac"/>
<data android:pathPattern=".*\\.it"/>
<data android:pathPattern=".*\\.m4a"/>
<data android:pathPattern=".*\\.m4b"/>
<data android:pathPattern=".*\\.m4p"/>
<data android:pathPattern=".*\\.mid"/>
<data android:pathPattern=".*\\.mka"/>
<data android:pathPattern=".*\\.mlp"/>
<data android:pathPattern=".*\\.mod"/>
<data android:pathPattern=".*\\.mpa"/>
<data android:pathPattern=".*\\.mp1"/>
<data android:pathPattern=".*\\.mp2"/>
<data android:pathPattern=".*\\.mp3"/>
<data android:pathPattern=".*\\.mpc"/>
<data android:pathPattern=".*\\.mpga"/>
<data android:pathPattern=".*\\.oga"/>
<data android:pathPattern=".*\\.ogg"/>
<data android:pathPattern=".*\\.oma"/>
<data android:pathPattern=".*\\.opus"/>
<data android:pathPattern=".*\\.ra"/>
<data android:pathPattern=".*\\.ram"/>
<data android:pathPattern=".*\\.rmi"/>
<data android:pathPattern=".*\\.s3m"/>
<data android:pathPattern=".*\\.spx"/>
<data android:pathPattern=".*\\.tta"/>
<data android:pathPattern=".*\\.voc"/>
<data android:pathPattern=".*\\.vqf"/>
<data android:pathPattern=".*\\.w64"/>
<data android:pathPattern=".*\\.wav"/>
<data android:pathPattern=".*\\.wma"/>
<data android:pathPattern=".*\\.wv"/>
<data android:pathPattern=".*\\.xa"/>
<data android:pathPattern=".*\\.xm"/>
<data android:pathPattern=".*\\.3GA"/>
<data android:pathPattern=".*\\.A52"/>
<data android:pathPattern=".*\\.AAC"/>
<data android:pathPattern=".*\\.AC3"/>
<data android:pathPattern=".*\\.ADT"/>
<data android:pathPattern=".*\\.ADTS"/>
<data android:pathPattern=".*\\.AIF"/>
<data android:pathPattern=".*\\.AIFC"/>
<data android:pathPattern=".*\\.AIFF"/>
<data android:pathPattern=".*\\.AMR"/>
<data android:pathPattern=".*\\.AOB"/>
<data android:pathPattern=".*\\.APE"/>
<data android:pathPattern=".*\\.AWB"/>
<data android:pathPattern=".*\\.CAF"/>
<data android:pathPattern=".*\\.DTS"/>
<data android:pathPattern=".*\\.FLAC"/>
<data android:pathPattern=".*\\.IT"/>
<data android:pathPattern=".*\\.M4A"/>
<data android:pathPattern=".*\\.M4B"/>
<data android:pathPattern=".*\\.M4P"/>
<data android:pathPattern=".*\\.MID"/>
<data android:pathPattern=".*\\.MKA"/>
<data android:pathPattern=".*\\.MLP"/>
<data android:pathPattern=".*\\.MOD"/>
<data android:pathPattern=".*\\.MPA"/>
<data android:pathPattern=".*\\.MP1"/>
<data android:pathPattern=".*\\.MP2"/>
<data android:pathPattern=".*\\.MP3"/>
<data android:pathPattern=".*\\.MPC"/>
<data android:pathPattern=".*\\.MPGA"/>
<data android:pathPattern=".*\\.OGA"/>
<data android:pathPattern=".*\\.OGG"/>
<data android:pathPattern=".*\\.OMA"/>
<data android:pathPattern=".*\\.OPUS"/>
<data android:pathPattern=".*\\.RA"/>
<data android:pathPattern=".*\\.RAM"/>
<data android:pathPattern=".*\\.RMI"/>
<data android:pathPattern=".*\\.S3M"/>
<data android:pathPattern=".*\\.SPX"/>
<data android:pathPattern=".*\\.TTA"/>
<data android:pathPattern=".*\\.VOC"/>
<data android:pathPattern=".*\\.VQF"/>
<data android:pathPattern=".*\\.W64"/>
<data android:pathPattern=".*\\.WAV"/>
<data android:pathPattern=".*\\.WMA"/>
<data android:pathPattern=".*\\.WV"/>
<data android:pathPattern=".*\\.XA"/>
<data android:pathPattern=".*\\.XM"/>
<data android:pathPattern=".*\\.asx"/>
<data android:pathPattern=".*\\.ASX"/>
<data android:pathPattern=".*\\.m3u"/>
<data android:pathPattern=".*\\.M3U"/>
<data android:pathPattern=".*\\.pls"/>
<data android:pathPattern=".*\\.PLS"/>
<data android:pathPattern=".*\\.xspf"/>
<data android:pathPattern=".*\\.XSPF"/>
</intent-filter>
</activity>
Also try using "video/mp4" instead of "video/*" in your "code to reproduce the issue" 也可以尝试在“代码重现问题”中使用“video / mp4”代替“video / *”
Intent intent = new Intent("android.intent.action.VIEW");
intent.setDataAndType(Uri.parse("http://media.w3.org/2010/05/sintel/trailer.mp4"),
"video/mp4");
startActivity(intent);
HTHs HTHS
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.