【问题标题】:Android intent-filter - custom extensionAndroid 意图过滤器 - 自定义扩展
【发布时间】:2015-09-11 03:59:13
【问题描述】:

我一直在寻找解决方案,但无济于事。我已经成功设置了我的应用程序,以便在点击它的数据文件时,我的应用程序可以选择打开它(如果没有自动打开)。问题是其他文件类型也可以选择“使用我的应用程序打开”,一旦我的应用程序启动,该选项很容易被阻止,但我想一起删除该选项。

我尝试将 pathPattern 更改为非常具体的内容,因为这应该是唯一使用过的文件名:“file.fakeapp”,但我的应用仍然尝试打开任何文件,无论名称或分机如何。

这是我的意图过滤器:

        <intent-filter>
            <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:pathPattern="file.fakeapp" 
                android:mimeType="application/octet-stream"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data 
                android:scheme="file" 
                android:mimeType="*/*"     
                android:pathPattern="file.fakeapp"/>
        </intent-filter>

我怀疑问题是由于文件方案 mimeType "*/*" 但如果我将其设为其他任何内容,我的应用程序 不是 是打开自定义文件类型的选项。所以我似乎处于一个全有或全无的境地。文件类型实际上只是 sqlite,但具有自定义扩展名。

非常感谢任何帮助。

【问题讨论】:

  • 在您的活动中,您是否尝试过使用 getIntent() 获取接收到的意图,然后使用 getAction()、getCategories()、getScheme()、getDataString() 检查其内容?该数据可能会提供一些关于过滤器匹配如何发生的线索。此外,从您的帖子中不清楚您是否同时在清单中使用了这两个过滤器,或者您列出了这两个过滤器只是因为您尝试了每一个但都没有工作。
  • 感谢您回复@qbix - 两者都在我的清单中。感谢您提供的提示,我一定会从那里开始探索。

标签: android android-intent android-pendingintent intentfilter file-extension


【解决方案1】:

documentation 表示如果方案和主机不存在,则忽略 pathPattern 的值。尝试添加:

<data android:host="*" />

也可以看看这个相关的SO post and answer

【讨论】:

  • 再次感谢@qbix - 我会试试这个并报告。
  • 呃。我不喜欢这个问题与我在文档中遗漏的东西有关。你明白了,@qbix - 需要添加主机。谢谢!
  • @Warbir 该解决方案很容易被忽视。匹配规则复杂。只有在查看相关问题和解决方案后,我才得到答案。很高兴它对你有用。
  • 实际上,我意识到,一旦我把它安装到位,除了 gmail 应用程序之外,一切都开始按预期工作。它不再提供使用我的应用程序的选项,而是尝试使用一些随机文本应用程序打开文件。我环顾四周,发现 stackoverflow.com/a/25663412/1542275 - 响应标记为 -1,但在此解决方案中添加了标记为“用于在 Gmail 中捕获附件:”的意图过滤器,以使事情完全按照我的意愿工作。跨度>
猜你喜欢
  • 1970-01-01
  • 2014-03-09
  • 2010-12-16
  • 2016-07-27
  • 2014-12-01
  • 2020-03-03
  • 1970-01-01
  • 2021-08-09
  • 2022-12-08
相关资源
最近更新 更多