打开我的应用程序以获取特定文件和 URL 扩展名 - 意图过滤器未按预期工作

2023-11-29

问题:

如何让我的应用程序无条件打开文件和 URL 扩展名?

我对设置我的intent-filter因为这些都没有任何意义。我的最终目标是开放任何有path以某个扩展结尾。为了举例,我们选择".riley"作为我的目标延伸。

我的基地“意图过滤器”

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

目前可以从以下位置打开file and content.

问题#1:路径模式

对于初学者来说,似乎并不data范围pathPattern做任何事情,正如我所设定的:

<data
    android:host="*"
    android:mimeType="*/*"
    android:pathPattern=".*\\.riley" />

..但我仍然可以打开Intents with Uri不以以下结尾的路径".riley"在下面file and content scheme.

我的应用程序使用此打开的几个示例路径intent-filter are:

Path: /storage/sdcard0/Download/MyApp.apk Path: /messagesByAccount/1

为了清楚起见,“路径:”只是我自己在日志中添加的内容。第一个是来自 gmail 下的file方案,第二个来自 gtalk 下的content方案。鉴于此,我已经很困惑如何intent-filters work.

The pathPattern被忽略file and content计划。

问题#2:在浏览器中打开

我尝试打开我的应用程序".riley"来自浏览器的扩展,但是重定向链接没有 MIME 类型,所以我删除了mimeType值来自于data模式(我有android:mimeType="*/*"之前,因为 MIME 类型不一致),这使我可以从重定向 URL 中打开。

当我尝试直接打开一个时出现问题".riley"来自浏览器的 URL(例如:http://thisisnotarealdomainname.com/myfile.riley)并且从我的应用程序打开的选项消失了。添加mimeType价值回到我的data模式允许我从直接 URL 打开。

The intent-filter不允许我打开直接和间接 URL。

问题#3:方案

我希望能够从多种不同的方案类型中打开(例如:http,file,content), but as soon as I removeschemealtogether, it disqualifies my application from opening thehttpscheme and when I specify方案=“*”, it disqualifies my application from opening ANY scheme. I've also tried adding moredata` 模式,但我感觉好像只有一个生效,因为这对我没有任何帮助。

所以,指定http将允许http,但显然也不允许file or content并且没有指定scheme禁用http.

我无法从所有不同的方案中打开。

重申一下,如何让我的应用程序无条件打开文件和 url 扩展名,鉴于这些并发症?


问题#1:<data android:pathPattern=".*\\.riley" />根本就是无效的。引用文档:

仅当还为过滤器指定了方案和主机属性时,[pathPattern]才有意义。

问题 #2:“但是重定向链接没有 MIME 类型”应该是不正确的,除非 Web 服务器严重损坏。 HTTP 重定向本身没有 MIME 类型,但应该由浏览器本身处理,因为在浏览器处理重定向之前,它不知道 URL 是否指向它应该处理的内容(例如网页)或者应该下载的东西。重定向的结果——HTTP 200 OK 响应——应该有一个 MIME 类型。如果您确信重定向到下载的 URL 不起作用,请创建一个演示错误的示例项目并将其发布到某处以供审核。

问题#3:“我无法从所有不同的方案中打开。” -- 使用多个<data>具有多个的元素android:scheme属性,单独<intent-filter>元素。

例如,AOSP 音乐应用程序具有:

    <activity android:name="AudioPreview" android:theme="@android:style/Theme.Dialog"
            android:taskAffinity=""
            android:excludeFromRecents="true" android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="file"/>
            <data android:mimeType="audio/*"/>
            <data android:mimeType="application/ogg"/>
            <data android:mimeType="application/x-ogg"/>
            <data android:mimeType="application/itunes"/>
        </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="http" />
            <data android:mimeType="audio/*"/>
            <data android:mimeType="application/ogg"/>
            <data android:mimeType="application/x-ogg"/>
            <data android:mimeType="application/itunes"/>
        </intent-filter>
        <intent-filter
            android:priority="-1">
            <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:mimeType="audio/*"/>
            <data android:mimeType="application/ogg"/>
            <data android:mimeType="application/x-ogg"/>
            <data android:mimeType="application/itunes"/>
        </intent-filter>
    </activity>

您会注意到这三个中的操作、类别和 MIME 类型都是相同的<intent-filter>节;只有android:scheme属性不同。

现在file仅当某些本地文件管理器将适当的 MIME 类型附加到Intent;音乐不尝试使用android:pathPattern来匹配文件扩展名。事实上,谷歌很少使用android:pathPattern。 AOSP 日历应用程序中出现一件事:

        <intent-filter
           android:priority="50">
           <action android:name="android.intent.action.VIEW" />
           <category android:name="android.intent.category.DEFAULT" />
           <category android:name="android.intent.category.BROWSABLE" />
           <data android:scheme="http" android:host="www.google.com" android:pathPrefix="/calendar/event" />
           <data android:scheme="https" android:host="www.google.com" android:pathPrefix="/calendar/event" />
           <data android:scheme="http" android:host="www.google.com" android:pathPattern="/calendar/hosted/.*/event" />
           <data android:scheme="https" android:host="www.google.com" android:pathPattern="/calendar/hosted/.*/event" />
        </intent-filter>

但仅此而已。当然其他人也尝试过——StackOveflow 上有很多关于它的使用的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打开我的应用程序以获取特定文件和 URL 扩展名 - 意图过滤器未按预期工作 的相关文章

随机推荐

  • 如何在 Scala 3 中证明 `Tuple.Map[H *: T, F] =:= (F[H] *: Tuple.Map[T, F])`

    我正在尝试编写一个包含元组类型给定实例的特征 是的 我知道summonAll存在 trait TupleInstances C T lt Tuple val instances Tuple Map T C given C TupleInst
  • 无法在 codeigniter 3 中使用 SMTP gmail 配置发送电子邮件

    下面是我的代码 我参考了堆栈溢出和 codeigniter 用户指南中的所有示例 我仍然无法解决这个问题 public function send config protocol smtp config smtp crypto ssl co
  • Access/Excel VBA - 时间延迟

    Note 刷新 Excel 中链接到 Access 数据库的表 Excel 中的表需要按顺序刷新 例如 Test Sheet1 Test Sheet2 Test Sheet3 Excel 文件由多个用户访问 问题 在 Access vba
  • 查看更多和查看更少按钮

    下面的脚本每次单击按钮时都会显示 4 个项目 我需要的是在单击后更改按钮的文本以 显示更多 然后在显示所有项目时更改为 显示更少 我尝试添加这个 if nowShowing gt numInList partners button a to
  • ngRepeat 按深层属性过滤

    如果我有一个以对象作为属性值的复杂对象 如何按嵌套属性之一进行过滤 这可以通过 OOB ng repeat 过滤器来完成吗 Data Name John Smith Manager id 123 Name Bill Lumburg ngRe
  • 使用 href onclick 更新 div 而不重新加载页面?

    我用这个现有的问题来帮助我 HTML 更改 更新页面内容而不刷新 重新加载页面 template comparison php 文件从 header php 代码中获取代码 但实际的 获取代码 并未显示 否则 模板页面将没有标题 templ
  • Play 位置服务 getLastLocation 返回 null

    我正在尝试聆听位置变化 但有时onLocationChanged回调永远不会被调用并且getLastLocation回报null 而谷歌地图始终运行完美 Note 如果我重新启动设备 定位服务将仅工作约 2 天 之后我的应用程序和SDK 示
  • 即使提供了参数,过程仍需要参数

    我看到其他一些人也面临着类似的问题 我已阅读并检查了标题为的问题过程需要未提供的参数 我认为这可以解决我的问题 但我错了 我确实检查了那里建议的步骤 但没有成功 这是我的代码 oOleDbCommand CommandText usp Pe
  • 如何在 iPhone 上以卡拉 OK 风格显示歌词?

    我目前正在创建一个播放音乐的应用程序 我想添加一个功能 在播放音乐时显示音乐歌词 并标记文本的当前位置以匹配歌曲中的当前位置 弹跳球效果 就像您在播放歌曲时在每个卡拉 OK 屏幕上看到的一样 我一直在考虑扩展我的咖啡馆文件 添加 字符串块
  • 实体框架查找方法无法正常工作

    我有名为 课程 学生 和 教师 的课程 如下所示 public class Course Key DatabaseGenerated DatabaseGenerationOption Identity public Guid CourseI
  • 如何将 Bluebird 与 Angular 结合使用?

    我尝试使用 Angular 和 Bluebird 承诺 HTML div name also div JS javascript var app angular module HelloApp app controller HomeCont
  • 通过 Powershell 更改 Chrome 设置

    我想编写一个脚本来更改 Chrome 中的默认页面缩放 但我不知道这些选项存储在哪里 我想我必须找到一个合适的选项文本文件 解析它 然后使用 powershell 进行文本替换才能应用更改 每次将笔记本电脑连接到外部显示器时 我都需要执行此
  • 非拉丁字符和哎哟

    我正在了解 Cake PHP 它发现了一个关于 PHP MySQL 字符集内容最佳实践的一般问题 我希望可以在这里得到解答 我的 练习 系统包含一个 mysql 电影表 该列表源自 Excel 工作表 该工作表导出为 CSV 并通过 php
  • 亚马逊 Linux 上的 uwsgi 新贵

    我按照本教程创建了一个 uwsgi 文件https uwsgi readthedocs org en latest Upstart html在亚马逊Linux上 虽然它似乎没有运行 因为 Nginx 只是说网关不好 如果我运行 etc in
  • JLabel:异步加载 HTML 图像

    A JLabel允许 HTML 内容 其中可以包含图像 String html img src JLabel label new JLabel html 请注意 我使用JLabel用于渲染图像JXTreeTable 因此更新文本JLabel
  • 如何从 C# 应用程序中将焦点设置到桌面

    Winforms 应用程序 Net 3 5 我需要将焦点从 C 应用程序设置到用户桌面 几乎就像模拟鼠标在桌面上单击一样 有人可以告诉我如何用 C 做到这一点吗 我只想将焦点设置在桌面上 以便焦点不再位于我的应用程序上 但我想在我的应用程序
  • 在 Perl 中打印字符串

    有没有一种简单的方法 也许使用子例程 在 Perl 中打印字符串而不转义每个特殊字符 这就是我想做的 print DELIMITER i DELIMITER 显然 如果我可以使用字符串而不是特殊字符作为分隔符 那就太好了 佩尔多克 佩洛普
  • 多线程并发访问和全局互斥

    OpenSSL 常见问题解答指出它可以在线程应用程序中使用 1 OpenSSL是线程安全的吗 如果应用程序设置了线程回调函数 答案是肯定的 此回调函数引用全局 SSL 锁 因此如果您有 2 个 ssl 连接运行 它们都将使用此全局锁 然而
  • Spring Oauth2隐式流程

    致力于使用 Spring 实现 Oauth2 我想实现隐式工作流程 我的配置文件 Configuration EnableAutoConfiguration RestController public class App Autowired
  • 打开我的应用程序以获取特定文件和 URL 扩展名 - 意图过滤器未按预期工作

    问题 如何让我的应用程序无条件打开文件和 URL 扩展名 我对设置我的intent filter因为这些都没有任何意义 我的最终目标是开放任何有path以某个扩展结尾 为了举例 我们选择 riley 作为我的目标延伸 我的基地 意图过滤器