android - Intent 过滤器适用于模拟器,但不适用于设备

标签 android android-intent intentfilter android-10.0

我正在创建一个自定义 intent 过滤器,当我点击具有特定文件扩展名(在本例中为 .myextension)的文件时,它将打开我的应用程序。intent-filter 如下。每次我从我的模拟器打开一个 .myextension 文件时,这目前都能完美运行。但是,当我从我的设备上尝试时,它不再有效。

在我的设备上,当我在文件浏览器应用程序中点击一个 .myextension 文件时,我看到了Unable to preview file. 而不是自动打开应用程序。我尝试从多个位置(文件应用、GDrive、下载文件夹、Slack/Gmail、内部存储和 SDCard)打开文件。我在模拟器和设备上都使用 Android 10。

<intent-filter android:label="My App">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:scheme="content"
        android:mimeType="*/*"
        android:host="*"
        android:pathPattern=".*\\.myextension" />
</intent-filter>

我也尝试用这个 block 替换那个 data 标签/添加第二个标签,但它似乎没有帮助:

<data
    android:scheme="file"
    android:mimeType="*/*"
    android:host="*"
    android:pathPattern=".*\\.myextension" />

我是否遗漏了一些明显的东西?任何帮助将不胜感激。谢谢!

最佳答案

This currently works perfectly every time I open a .myextension file from my emulator.

很多时候它会失败,因为它并没有真正绑定(bind)到模拟器而不是设备。

However, when I try it from my device, it no longer works.

A content Uri不需要文件扩展名,就像 https URL 不需要有文件扩展名。大多数时候,content Uri不会有文件扩展名,这样的 Uri与您的 <intent-filter> 不匹配.

ACTION_VIEW主要用于具有广泛认可的 MIME 类型的文件。

I've also tried replacing that data tag/adding a second tag with this block but it doesn't seem to help

file Uri自 Android 7.0 以来,值已被普遍禁止。

关于android - Intent 过滤器适用于模拟器,但不适用于设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58291822/

相关文章:

android - 更改 TextView 的文本颜色和背景

java - 运行 Android 应用程序时出错

java - 在 SQLite 数据库中存储共享值与传递 Intent

android - 如何删除使用 ACTION_VIDEO_CAPTURE 的 Intent 录制的视频?

Android Deeplink pathPrefix 属性被忽略

android - 在浏览器中单击 URL 时如何打开 android 应用程序

javascript - 为 JS 和 Java 编写代码

android - 使用 setScaleX() setScaleY() 更改 android 窗口大小

java - Android - 我如何从window1转到window2然后转到window3从window3跳回window1?

android - 在 android 中单击 gmail 通知时,在 Intent 选择器对话框中隐藏我的应用程序