我正在尝试读取(第一次-对我来说是新的)我的应用程序中的gmail附件(.gcsb扩展名)。意向过滤器如下所示:
<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="android.intent.category.BROWSABLE"></category>
<data android:pathPattern="*.gcsb"></data>
<data android:mimeType="application/*"></data>
</intent-filter>
这似乎让"下载"one_answers"预览"按钮出现在gmail中的附件旁边(如果没有过滤器,按钮就不会出现)。
在活动(onCreate()/onRestart())中,我执行:
....
Intent intent = getIntent();
if (!Intent.ACTION_VIEW.equals(intent.getAction())) {
// Deal with the file from gmail here
}
....
以检查是否是gmail导致了该活动的启动。
然而intent.getAction()总是解析为android.intent.action.MAIN,所以它从不做任何事情。活动中还有另一个意图过滤器:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
是为了应用程序的发布,但我不明白为什么我从来没有看到gmail的android.intent.action.VIEW?
答案似乎是由于各种原因将活动设置为"单个实例"。这意味着,当它再次出现在前台时,它回到了最初的意图,而不是gmail创建的意图。
删除"single instance"属性可以使用正确的意图。