2011-11-16 63 views
14

我有意向过滤器(ACTION_VIEW)的Android应用程序打开文件并将其导入到我的应用程序。我希望从Gmail应用程序下载文件附件到我的应用程序。某些文件类型(即jpg,png,txt)被正确保存,但有些不是(例如doc,xls,ppt)。我相信我的活动具有正确的意图过滤器,因为它可以从其他应用程序(即Dropbox)运行,但不能运行gmail应用程序。有没有解决方案?意图过滤器从Android上的Gmail应用程序下载附件

回答

7

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

<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> 

然而,根据Android文档,“如果没有为意图过滤器指定方案,则忽略所有其他URI属性。”除去方案和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> 

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

+0

该应用需要读取预览按钮发布的GMail“内容”URI的权限?我的应用程序没有权限,当我尝试打开它时,我得到无权限异常。阅读下载按钮发布的'文件'数据没有问题。 – user1139880

+0

用户 - 不知道。我在我的应用中拥有以下权限,但由于不同的用途,我添加了它们,而不是用于GMail预览/下载。你还可以验证我发布的意图是否导致显示gmail下载/预览?我知道我自己已经在Froyo,姜饼和冰淇淋三明治中进行了测试,它对我都有效。 –

+2

这导致我的意图过滤器触发任何时候,我在我的通知栏中得到一个新的Gmail,我去打开它。有其他人有这个问题吗?这绝对是这个过滤器造成的。 – BriCo84

0

因为这是谷歌有关“gmail附件意图过滤器”的最大问题之一,我发现上面的答案不工作在我的情况下,我张贴我的研究结果。

为了从Gmail的意向登记,我们需要支持的内容方案:

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="content" android:mimeType="*" android:host="*" /> 
</intent-filter> 

在我测试,URI不包含文件扩展名,即使它是显示在Gmail附件的情况下,所以使用android:pathPattern会阻止接收Gmail的意图。

由于事实上,注册到所有mimeTypes是一个矫枉过正的问题,我调试了Intent对象的内容(在Java端),发现在我的应用程序中text/plain就足够了(所以你的作业是找到适当的mimeTypes for你的申请)。我的最终意图过滤器如下所示:

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="content" android:mimeType="text/plain" android:host="*" /> 
</intent-filter> 
+0

** android:scheme =“file”**。这不需要吗? –

相关问题