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

  • 在 Android 上通话结束时启动活动

    我想在通话结束时启动一项活动 找不到任何对此的参考 我该怎么做 我还没有尝试过这个 但我假设你可以运行一些服务 始终在后台运行 它利用电话状态监听器 http developer android com reference android
  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • Gradle 构建错误:无法从 https://repo1.maven.org/maven2/io/fabric/tools/gradle/maven-metadata.xml 加载 Maven 元数据

    我在 Android studio 中遇到 gradle 构建错误 如下所示 Error A problem occurred configuring project MyApp Could not resolve all dependen
  • Android 初学者:Android gridview 中的触摸事件

    我正在使用以下代码来使用 gridview 执行操作 稍作修改http developer android com resources tutorials views hello gridview html http developer a
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • Android 深度链接至 Instagram 应用

    Instagram 已经发布了 iOS 深层链接的 url 方案 但尚未为 Android 创建文档 有没有办法深入链接到 Android 上的 Instagram 应用程序 以转到 Instagram 应用程序中的特定位置 例如 Inst
  • Android Eclipse 上的 Web 服务

    我是 android eclipse java 的新手 事实上这个论坛也是如此 有人遇到过这种情况吗 从用户那里获取输入并通过使用 android eclipse 中的 Web 服务来显示适当的结果 有可用的示例吗 非常感谢 我正在发布教程
  • Android:后台Activity可以执行代码吗?

    后台的活动是否被视为 正在运行 并且可以执行代码 还是处于挂起状态 他们暂停了 活动生命周期 http developer android com reference android app Activity html ActivityLi
  • 从 BroadcastReceiver 类调用活动方法

    我知道我可以做一个内部接收器类来调用接收器中的任何方法 但我的主要活动太大了 要做的事情也很多 因此 我需要一个扩展广播接收器的类 但它不是内部类 并且可以从我的主要活动中调用一种方法 我不知道是否可能 但我的活动是家庭活动和 single
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 对于一个单元格,RecyclerView onBindViewHolder 调用次数过多

    我正在将 RecyclerView 与 GridLayoutManager 一起使用 对于网格中的每个项目 我需要调用 REST api 来检索数据 然后 从远程异步获取数据后 我使用 UIL 加载 显示图像 一切似乎都很好 但我发现 on
  • Mipmap 与可绘制文件夹[重复]

    这个问题在这里已经有答案了 我正在使用 Android Studio 1 1 Preview 1 我注意到 当我创建一个新项目时 我得到以下层次结构 不同 DPI 的 Mipmap 文件夹 不再有不同 DPI 的可绘制文件夹 我应该将所有资
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 在 Samsung Galaxy S5 Android 5.0 上使用 MediaPlayer 加载音频流需要超过 10 秒

    由于更新至 Android 5 0 MediaPlayer 在 Samsung Galaxy S5 上无法正常工作 启动音频流后加载时间超过 10 秒 示例代码 MediaPlayer mPlayer new MediaPlayer Str
  • 上网本上可以进行Android开发吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用我的上网本进行 Android 开发 但是当我尝试使用 Eclipse 运行 SDK 时 没有加载任何内容 上网本对于 Android 开发来
  • 没有支持 FEATURE_CAMERA_EXTERNAL 的 Android 设备

    根据this doc https source android com devices camera external usb cameras一些 Android 设备允许使用 Camera2 API 访问外部 USB 摄像头 我检查了大约
  • 我的应用程序中的后退按钮出现问题[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在手机关闭时清除共享首选项值 你

随机推荐

  • 如何在 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 作为我的目标延伸 我的基地 意图过滤器