Android:注册意图过滤器以使用我的应用打开电子邮件附件

问题描述 投票:6回答:2

我有一个可生成自定义文件类型(.sor)的应用程序。在应用程序内部,我具有发送带有这些文件之一的电子邮件的功能。我也有一个意图过滤器,以允许该应用程序出现在可以打开这种文件类型的应用程序列表中。这使我可以(有时)直接从手机上的用户电子邮件客户端使用该应用程序打开文件。

但是,这仅在电子邮件来自PC电子邮件客户端时才有效,而从电话接收到电子邮件时则无效。例如,如果我生成这些.sor文件之一,然后使用我的应用程序将电子邮件发送到我自己的电子邮件帐户,我将在手机上收到该电子邮件,但无法使用我的应用程序打开附件...但是,如果我将电子邮件发送到同一帐户并在PC上(使用Thunderbird)而不是在手机上打开它,然后将其转发或作为新电子邮件发送到我的手机,则我将能够使用同一电子邮件应用在电话上打开带有我的应用程序的附件...我在这里只说一个电子邮件帐户,唯一的区别是从我的手机或Windows 7 PC发送电子邮件的位置。

[我唯一能想到的是,当我从电话发送电子邮件时,与在PC上从Thunderbird发送的电子邮件相比,附件中嵌入了另一种mime类型。我将mime类型指定为“应用程序/八位字节流”,当我从我的应用程序中发送电子邮件时,我有一个意图过滤器正在寻找这种mime类型...但无法正常工作。

我的意图过滤器:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="application/octet-stream" />
  <data android:scheme="file" />
</intent-filter>

从电话发送电子邮件附件中的文件时传递给电话电子邮件客户端的意图:

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("application/octet-stream");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + fullPathString));
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "FiberDroid OTDR Trace File: \"" + ContextMenuFileName + "\"");
sendIntent.putExtra(Intent.EXTRA_TEXT, "This e-mail was sent from the TTI FiberDroid Android application.");
startActivity(Intent.createChooser(sendIntent, "Select E-Mail Application"));

同样,发送带有附件的电子邮件也可以正常工作...如果我从PC电子邮件客户端(例如Outlook或Thunderbird)将同一文件发送回手机,那么我可以使用我的应用程序直接来自电话电子邮件应用程序。问题是,如果我以中间人身份通过电话打开手机中的电子邮件而没有通过我的PC,则无法打开附件,我得到的唯一选择是“保存到SD卡” ...

因此,我的手机上有2封电子邮件是相同的,带有相同的文件,并且最初都是从我的应用程序发送到同一帐户(也是从同一帐户收到的),但是附件中的附件通过我的PC时,不必要的中间人正常工作,而直接从我的手机发送和接收的中间人却无法正常工作。

有什么想法吗?预先谢谢你。

我有一个可生成自定义文件类型(.sor)的应用程序。在应用程序内部,我具有发送带有这些文件之一的电子邮件的功能。我也有一个意图过滤器,允许应用程序显示在...

android email android-intent filter attachment
2个回答
9
投票

我已经解决了这个问题,主要是通过在黑暗中拍摄而没有真正了解为什么我解决了这个问题,但是现在这是清单中用于意图过滤器的内容,其中“ .sor”是我的扩展名自定义文件类型。这适用于我尝试过的所有电子邮件和文件管理应用程序,包括K-9邮件和Astro:

<!-- For email attachments -->
<intent-filter>
   <action android:name="android.intent.action.VIEW" />
   <category android:name="android.intent.category.DEFAULT" />
   <data android:mimeType="application/*" host="*" android:pathPattern=".*.sor" android:scheme="content" />
</intent-filter>

<!--  For file browsers -->
<intent-filter>
   <action android:name="android.intent.action.VIEW"/>
   <category android:name="android.intent.category.DEFAULT"/>
   <data android:mimeType="application/*" host="*" android:pathPattern=".*.sor" android:scheme="file" />
</intent-filter>

0
投票

2020年更新

© www.soinside.com 2019 - 2024. All rights reserved.