我的应用程序不会出现在android.intent.action.VIEW的选择器对话框中,仅在Marshmallow

时间:2016-01-16 23:34:15

标签: android android-intent android-6.0-marshmallow android-filter android-intent-chooser

基本上,当一个应用程序共享一个视频网址时,我的应用程序应该显示在列表中,但它并不存在。 MXPlayer和谷歌照片媒体播放器都没有显示好和全播(最近有一个版本来解决这个问题)。

我写了一个快速的应用来测试这个问题,这是我的清单过滤器:

<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上,该列表已完全展开 This is on my Nexus 5 with 6.0.1, the list is fully expanded

这是在我的带有5.1.1的Nexus 4上,列表也完全展开 This is on my Nexus 4 with 5.1.1, list also fully expanded

两部手机都有完全相同的应用程序。

2 个答案:

答案 0 :(得分:8)

修正了它!我所要做的就是删除<category android:name="android.intent.category.BROWSABLE"/>

答案 1 :(得分:2)

请尝试以下for 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>

在“代码重现问题”中尝试使用“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