Android: Регистрация фильтра намерений для открытия вложения электронной почты в моем приложении


У меня есть приложение, которое генерирует пользовательские типы файлов (.Шор). Внутри приложения у меня есть функция, чтобы отправить электронное письмо с одним из этих файлов прилагается. У меня также есть фильтр намерений, позволяющий приложению отображаться в списке приложений, которые могут открыть этот тип файла. Это позволяет мне (иногда) открывать файл с приложением прямо из почтового клиента пользователя на телефоне.

Однако это работает только тогда, когда письмо приходит от почтового клиента ПК, и не будет работать, когда письмо получено от пользователя. телефон. Например, если я создам один из них .sor файлы, а затем использовать мое приложение, чтобы отправить письмо на мой собственный адрес электронной почты я получу письмо на свой телефон, но не смогу открыть вложение с помощью моего приложения... Но если я отправлю письмо на тот же аккаунт и открою его на своем ПК (с Thunderbird) вместо телефона, а затем либо перешлю его, либо отправлю его в качестве нового сообщения на свой телефон, я смогу использовать то же приложение электронной почты на телефоне, чтобы открыть вложение с помощью моего приложения... Я просто говорю. здесь речь идет об одной учетной записи электронной почты, единственная разница заключается в том, откуда было отправлено письмо, с моего телефона или с моего ПК с windows 7.

Единственное, о чем я могу думать, это то, что когда я отправляю электронное письмо с телефона, во вложении используется другой тип mime, чем когда я отправляю его с Thunderbird на моем компьютере... Я указываю тип mime как "application / octet-stream" при отправке электронной почты из моего приложения, и у меня есть фильтр намерения, который ищет этот тип 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>

Намерение, которое я передаю клиенту электронной почты phones при отправке файла во вложении электронной почты с телефона:

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"));

Опять же, отправка электронной почты с вложенным файлом работает правильно... и если я отправлю тот же файл обратно на телефон из почтового клиента ПК (например, outlook или thunderbird), то я смогу открыть файл с помощью моего приложения непосредственно из приложения phones email. Проблема в том, что если я открою письмо на телефон, не проходя через мой компьютер в качестве посредника, я не могу открыть вложение, единственный вариант, который мне дают, - это "сохранить на SD-карту"...

Итак, чтобы резюмировать, у меня есть 2 письма на моем телефоне, которые идентичны, с одним и тем же файлом прикреплены и оба первоначально отправлены из моего приложения на тот же счет (оба получены из того же счета также), но вложение в том, который прошел через мой компьютер в качестве ненужного посредника работает правильно, а тот, который был отправлен и получен непосредственно с моего телефона, не работает. нет.

Есть идеи? Заранее спасибо.

1 5

1 ответ:

Я решил это, в основном, стреляя в темноте и не очень понимая, почему то, что я сделал, решило это, но вот то, что у меня есть для моих фильтров намерения в манифесте сейчас, где ".sor " - это расширение моего пользовательского типа файлов. Это работает со всеми приложениями для управления электронной почтой и файлами, которые я пробовал, включая K-9 mail и 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>