如何让 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 不会发生任何破坏性(无需用户干预)。
您可能还需要添加<action android:name="android.intent.action.VIEW"/>
(您可以在过滤器中添加多个操作),但我不确定这里是否有必要。
【讨论】:
我添加了它,但没有运气。还有其他建议吗? 您尝试过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视频