我的应用不会显示在 android.intent.action.VIEW 的选择器对话框中,只有在 Marshmallow 上具有 mime 类型 video/*
Posted
技术标签:
【中文标题】我的应用不会显示在 android.intent.action.VIEW 的选择器对话框中,只有在 Marshmallow 上具有 mime 类型 video/*【英文标题】:My app won't show up on the chooser dialog for android.intent.action.VIEW with mime type video/* only on Marshmallow 【发布时间】:2016-04-22 08:42:54 【问题描述】:基本上,当应用分享视频网址时,我的应用应该会显示在列表中,但它不会。 MXPlayer 也没有,但 Google Photos 媒体播放器和 allcast 都显示得很好(最近有一个版本来解决这个问题)。
我写了一个快速应用来测试这个问题,这里是我的清单过滤器:
<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>
这是重现问题的代码:
Intent intent = new Intent("android.intent.action.VIEW");
intent.setDataAndType(Uri.parse("http://media.w3.org/2010/05/sintel/trailer.mp4"),"video/*");
startActivity(intent);
这只是 Marshmallow 的问题。
编辑:我应该补充一点,并非所有 Marshmallow 设备都这样做。从我第一次听说它到有一天它刚刚开始在我的 Nexus 5 上发生,我花了很长时间才重现它。我的 6P 不会重现它。
编辑:我在startActivity
之前添加了一些调试代码。基本上,我要求包管理器给我可以处理该意图的意图活动,然后我会得到与我在对话框中看到的完全相同的列表。
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
编辑:我认为添加屏幕截图可能会更清楚。
这是在我的 Nexus 5 和 6.0.1 上,列表已完全展开
这是我的 Nexus 4 和 5.1.1,列表也完全展开
两部手机的应用几乎完全相同。
【问题讨论】:
您是否尝试过每种 mime 类型的一个意图过滤器? 我在运行 Android 6.0.1 的 Nexus 9 上测试了您的意图过滤器,它运行良好。你用什么来重复这个问题? @ligi 我已经尝试了所有我能想到的组合。 @JaredRummler 可能有一些 Android 6.0.1 设备可以使用。自从我的用户开始报告该问题以来,我花了大约一个月的时间才重现该问题,突然间我开始能够在我的 Nexus 5 上重现它。我的 Nexus 6P 仍然无法重现它。 你可以尝试intent-intercept来获取更多细节 【参考方案1】:修好了!我所要做的就是删除<category android:name="android.intent.category.BROWSABLE"/>
【讨论】:
【参考方案2】:为您的意图过滤器尝试以下操作
<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>
还可以尝试在“重现问题的代码”中使用“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);
HTH
【讨论】:
感谢这份非常全面的清单,但它也有同样的问题。 @mntgoat 您可能需要再次检查,当我查看包含该链接的网页时,我可以让我的这个工作(我的应用程序显示在选择器中)。 你能检查一下 MXPlayer 是否出现在你面前吗?如果是这样,那么您在手机上看不到问题。似乎只有部分手机能体验到它。 DERP!!完全忘记了我正在我的 6P 运行 jan 更新(所以最新的 6.0.1)上尝试这个 @mntgoat MX Player 也出现了(相同的 6P 6.0.1 设备)以上是关于我的应用不会显示在 android.intent.action.VIEW 的选择器对话框中,只有在 Marshmallow 上具有 mime 类型 video/*的主要内容,如果未能解决你的问题,请参考以下文章
android android.intent.action.call 使 Android 应用程序崩溃?
Android Intent Filter:无法从预览中打开音频文件?