如何让 Android 知道我的应用可以打开 MP4 文件

Posted

技术标签:

【中文标题】如何让 Android 知道我的应用可以打开 MP4 文件【英文标题】:How to let Android know my app can open MP4 files 【发布时间】:2021-02-24 18:42:19 【问题描述】:

我不知道如何正确表达这个问题。不过我会尽力的。当我在手机网络浏览器中单击直接视频链接示例 (https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_1MB.mp4) 时,浏览器会询问我是否要打开或下载文件。我选择了打开,系统为我提供了一些可以用来打开文件的应用程序。问题是我的应用程序未列出。如果我突出显示并分享链接,我的应用程序就会列出。但是,我希望在打开或共享时同时列出它。

在我的清单中,我将以下内容添加到 mainactivity:

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter android:scheme="http"
            tools:ignore="AppLinkUrlError">
            <action android:name="android.intent.action.SEND"/>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:mimeType="video/*"/>
        </intent-filter>
        <intent-filter android:scheme="http"
            tools:ignore="AppLinkUrlError">
            <action android:name="android.intent.action.SEND"/>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="text/plain"/>
        </intent-filter>
    </activity>

【问题讨论】:

【参考方案1】:

尝试添加

<category android:name="android.intent.category.BROWSABLE"/>

可以从浏览器安全调用的活动必须支持此类别。例如,如果用户正在查看网页或电子邮件并单击文本中的链接,则生成的执行该链接的 Intent 将需要 BROWSABLE 类别,因此只有支持该类别的活动才会被视为可能的操作.通过支持此类别,您承诺调用任何匹配的 Intent 不会发生任何破坏性(无需用户干预)。

您可能还需要添加&lt;action android:name="android.intent.action.VIEW"/&gt;(您可以在过滤器中添加多个操作),但我不确定这里是否有必要。

【讨论】:

我添加了它,但没有运气。还有其他建议吗? 您尝试过VIEW 操作吗?此外,如果您删除明文过滤器,共享是否仍然有效?如果确实如此,您的 MIME 类型可能没问题 - 如果不是,您可能会通过共享获得文本 URL 或其他内容,但打开文件需要正确的数据类型规范,这就是所有这些都可能变得有点棘手的地方(我我绝对不是专家!) 当我添加 VIEW 操作时,所有内容都带有红色下划线。是的,我尝试了查看操作。查看我更新的代码。 如果我删除纯文本它不起作用。数据类型可能是我的问题。我在这里使用大钱兔子测试视频:test-videos.co.uk/bigbuckbunny/mp4-h264请不要放弃我。我正在为这个大声笑掉头发。还有其他想法吗? 是的,抱歉,我已经搞砸了一段时间,但我什么也做不了。我在联系人应用程序中将链接添加为“网站”(以防 Chrome 并没有真正要求应用程序播放它可以处理的视频),但没有骰子。我从浏览器应用程序代码中粘贴了意图过滤器(在此处某处关闭另一个答案!)但在默认应用程序下说我的测试“声称不处理任何链接”。老实说,我不知道,对不起,伙计【参考方案2】:

catustictacs 引导我朝着正确的方向前进。我正在寻找一种通用方式来打开我的应用程序中的任何链接。然而,这似乎是不可能的。您必须描述每个服务器的数据类型。 :( 下面我将展示我的意图过滤器的代码。它一团糟,但它适用于我指定的网站。

** 如果有人知道让我的应用打开任何链接的通用方法,请告诉我。 VLC 播放器似乎可以通过任何链接打开。

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https"
                android:host="test-videos.co.uk"/>
            <!--<data android:mimeType="video/*" />-->
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https"
                android:host="test-videos.co.uk"/>
            <data android:scheme="https"
                android:host="storage.googleapis.com"/>
            <!--<data android:mimeType="text/plain" />-->
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:mimeType="video/*" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>

【讨论】:

以上是关于如何让 Android 知道我的应用可以打开 MP4 文件的主要内容,如果未能解决你的问题,请参考以下文章

Android应用开发中的Pre-Load或Pre-Buffer .mp4视频

单击 MP3 文件时打开媒体播放器

android - 如何在我的音乐播放器中从文件管理器播放 mp3 文件?

如何在手机的默认应用程序上打开 mp3 文件?

如何让我们的应用在 android 的“打开方式”中可见?

如何在Android中使用GPS服务