【问题标题】:How to let Android know my app can open MP4 files如何让 Android 知道我的应用可以打开 MP4 文件
【发布时间】: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>

【问题讨论】:

    标签: android kotlin media-player mime open-with


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2012-07-10
      相关资源
      最近更新 更多