为Android电子邮件附件创建默认查看器/接收器

为Android电子邮件附件创建默认查看器/接收器,android,Android,我正在尝试为Android中的.p7s/.p7b文件创建一个默认处理程序 我认为最好的开始是创建一个BroadcastReceiver,它将捕获Android电子邮件应用程序(或者K-9,如果需要的话)打开某些附件(按mime类型过滤)的意图。具体来说,我正在尝试处理s/mime电子邮件,以便查找“application/x-pkcs7-certificates”和“application/x-pkcs7-certificates”mime类型 作为一项基本测试,我一直在尝试以下内容: Mani

我正在尝试为Android中的.p7s/.p7b文件创建一个默认处理程序

我认为最好的开始是创建一个BroadcastReceiver,它将捕获Android电子邮件应用程序(或者K-9,如果需要的话)打开某些附件(按mime类型过滤)的意图。具体来说,我正在尝试处理s/mime电子邮件,以便查找“application/x-pkcs7-certificates”和“application/x-pkcs7-certificates”mime类型

作为一项基本测试,我一直在尝试以下内容:

Manifest.xml

<receiver android:name=".IntentReceiver" android:enabled="true">
     <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:mimeType="application/x-pki-signature"/>
     </intent-filter>
</receiver>
我也尝试过使用以下mimeType过滤器(首先测试签名):


不管我使用什么过滤,我似乎都无法让IntentReceiver类捕获意图。我这样做是错误的吗?

我会包括所有这些MIME类型(只需使用多个
元素)

不过,可能是电子邮件中没有包含MIME类型。我不知道您是如何发送电子邮件的,但请尝试将它们发送到某个帐户,在那里您可以查看电子邮件消息的完整来源。如果消息中未包含MIME类型,则说明您运气不佳


您还可以在网页(Web服务器提供MIME类型头)中测试指向其中一个文件的链接,以确认您的基本处理是否正常。

修复:我尝试简单地使用常规活动,并将MIME类型过滤添加到其中,然后BAM!成功了。似乎与不支持这种视图意图的BroadcastReceiver存在差异

新舱单:

<activity android:name=".PkixReceiver"
          android:label="@string/app_name">
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="android.intent.action.VIEW" />
        <data android:mimeType="application/x-pkcs7-signature" />
        <data android:mimeType="application/pkcs7-signature" />
        <data android:mimeType="application/keychain_access" /> 
    </intent-filter>
</activity>


现在,当点击“打开”附件时,活动被触发,成功

电子邮件已格式化,并包含所有正确的类型/文件。我分别尝试了所有不同的过滤器类型,以确保捕捉到正确的过滤器。仍然没有通过。修复:我试图简单地使用一个常规的活动,并将mimeType过滤添加到其中,然后BAM!成功了。看来广播接收器不支持这种类型的视图意图肯定存在差异。我很抱歉在我之前的回答中遗漏了这一点<代码>意图用于三个相互排斥的操作:启动活动、启动服务和广播。浏览器和电子邮件应用程序等都是基于MIME类型启动的活动;
BroadcastReceiver
无法拾取这些。感谢您的输入,这确实有助于解释为什么BroadcastReceiver没有拾取任何内容。
application/pkcs7-signature
application/x-pkcs7-signature
application/keychain_access
<activity android:name=".PkixReceiver"
          android:label="@string/app_name">
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="android.intent.action.VIEW" />
        <data android:mimeType="application/x-pkcs7-signature" />
        <data android:mimeType="application/pkcs7-signature" />
        <data android:mimeType="application/keychain_access" /> 
    </intent-filter>
</activity>