简体   繁体   English

我的应用程序不会出现在android.intent.action.VIEW的选择器对话框中,只有在棉花糖上才有mime类型的视频/ *

[英]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上,该列表已完全扩展 这是在我的Nexus 5 6.0.1上,该列表已完全扩展

This is on my Nexus 4 with 5.1.1, list also fully expanded 这是我的Nexus 4和5.1.1,列表也完全扩展 这是我的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.

相关问题 使用android.intent.action.VIEW打开另一个应用程序 - Open Another App with android.intent.action.VIEW 如何以编程方式捕获意图(使用动作“ android.intent.action.VIEW”) - How to capture intent (with action “android.intent.action.VIEW”) programatically 找不到用于处理意图的活动{act = android.intent.action.View} - No activity found to handle intent { act=android.intent.action.View } 未找到处理 Intent 的活动:android.intent.action.VIEW - No Activity found to handle Intent : android.intent.action.VIEW 无法启动服务意图{act = android.intent.action.VIEW…} - Unable to start service Intent { act=android.intent.action.VIEW… } 没有找到处理 Intent { act=android.intent.action.VIEW dat=app://} 的活动 - No Activity found to handle Intent { act=android.intent.action.VIEW dat=app:// } 启动android.intent.action.VIEW时出现ActivityNotFoundException - ActivityNotFoundException when starting android.intent.action.VIEW Expo IntentLauncher.startActivityAsync 与 android.intent.action.VIEW - Expo IntentLauncher.startActivityAsync with android.intent.action.VIEW Android - 找不到处理Intent的活动{act = android.intent.action.VIEW - 试图打开PDF文件 - Android - No Activity found to handle Intent { act=android.intent.action.VIEW - Trying to open a PDF File android.content.ActivityNotFoundException:找不到用于处理Intent的活动{act = android.intent.action.VIEW dat = content:// - android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM