【问题标题】:Issue with intent filter for opening a file in Android app在 Android 应用程序中打开文件的意图过滤器问题
【发布时间】:2019-05-16 23:15:24
【问题描述】:

我正在尝试在我的 Android 应用中打开任何带有 .conf 扩展名的文件。这是我在AndroidManifest.xml 中的内容:

<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="file" />
    <data android:host="*" />
    <data android:mimeType="*/*" />
    <data android:pathPattern=".*\\.conf" />
</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="content" />
    <data android:host="*" />
    <data android:mimeType="*/*" />
    <data android:pathPattern=".*\\.conf" />
</intent-filter>

但是,当我点击 Downlaods 文件夹中的 .conf 文件时,它显示“无法打开文件”。

这是我使用Intent Intercept 时得到的结果:

我做错了什么?

【问题讨论】:

    标签: android android-intent intentfilter


    【解决方案1】:

    删除:

    <data android:host="*" />
    

    来自&lt;intent-filter&gt; 条目和:

    <data android:pathPattern=".*\\.conf" />
    

    来自content 一个。

    文件扩展名在 Android 上使用不多。从 Android Q 开始,files 在 Android 上很少使用。 ContentProvider 不需要在 content Uri 上放置类似文件的扩展名,正如您在屏幕截图中的 Uri 中看到的那样。

    如果您希望支持常见的Intent 操作,例如ACTION_VIEW,最好的办法是将文件保存为具有匹配文件扩展名的常见元格式(例如,JSON、XML),然后让您的@ 987654331@ 过滤相应的 MIME 类型。您将需要处理用户选择的文件不是由您的应用创建的文件的可能性,但从技术上讲,即使使用自定义扩展程序,您也需要处理这种情况。

    【讨论】:

    • 我无法从file 中删除&lt;data android:host="*" /&gt;。我得到一个错误。但是,我从content 中删除了它和pathPattern。它现在可以工作,但这不会太通用吗?我希望我的应用打开一个非常具体的文件。
    • @ataravati:“我得到一个错误”——什么样的错误? “但那会不会太笼统了?” ——是的,但你别无选择。如果您使用映射到常见 MIME 类型的通用文件扩展名,则可以将 &lt;intent-fitler&gt; 限制为该 MIME 类型,并减少候选者的数量。就目前而言,应用程序会将您的应用程序视为所有事物的候选者,因为您需要成为所有事物的候选者才能成为您的自定义内容的候选者。考虑改用存储访问框架,而不是尝试回复ACTION_VIEW
    • 感谢您的澄清!
    猜你喜欢
    • 2013-10-03
    • 2012-10-28
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多