Intent过滤器从Android上的gmail应用程序下载附件

oce*_*est 14 gmail android attachment download android-intent

我有Android应用程序与意图过滤器(ACTION_VIEW)打开文件并将其导入我的应用程序.我希望从gmail应用程序下载文件附件到我的应用程序.一些文件类型(即jpg,png,txt)被正确保存,但有些不是(即doc,xls,ppt).我相信我对我的活动有正确的意图过滤器,因为它适用于其他应用程序(即dropbox),但不适用于gmail应用程序.这有什么解决方案吗?

Aut*_*ira 8

通过删除我的意图中的方案数据过滤器,我能够在GMail中的Android上弹出下载和预览按钮(删除方案行并尝试一下):

<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:mimeType="*/*" />
<data android:pathPattern=".*\\.ext" />
<data android:host="*" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

但是,根据Android文档,"如果没有为intent过滤器指定方案,则忽略所有其他URI属性." 删除了scheme和URI属性后,过滤意图的唯一方法是使用Mime类型,我们都知道自定义文件扩展名没有注册的mime类型.

作为参考,URI的形式如下:

  • 方案://主机:端口/路径
  • pathPrefix
  • pathPattern

所以没有方案,所有这些都会下降.在发现上述内容之后,我尝试了显而易见的 - 使用"*"作为方案,甚至尝试了".*".这些都没有奏效.我希望其他人可以继承我的考验.但我认为这与选择正确的方案有关.不幸的是,我所知道的唯一方案是http https内容和文件,以上都不是神奇的子弹.

编辑::::::::

我昨天解决了这个问题 请参阅我的解决方案:

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/*" host="*" android:pathPattern=".*.ext" android:scheme="content" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

此意图将导致gmail显示"下载/预览"按钮.实际上,当.ext文件作为附件发送到常规电子邮件客户端时,这也会导致您的应用程序打开.

  • 正如之前的评论所提到的,将mime-type设置为application/*意味着用户将获得一个选择器,要求在Gmail/Email和您的应用中打开所有新的电子邮件通知.而是使用:`<data android:mimeType ="application/octet-stream"android:host ="*"android:pathPattern =".*\\.extension"/>` (13认同)
  • 这导致我的意图是在我的通知栏中获取新gmail的任何时候过滤触发器,然后我去打开它.还有其他人有这个问题吗?这绝对是导致它的过滤器. (2认同)