2013-05-09 5 views
2

Я хочу, чтобы мое приложение для Android отправляло файл с одного устройства на другое устройство различными способами (почта, Bluetooth, что угодно).Вложение электронной почты не имеет правильного содержимого Тип контента

Мой первый прецедент - электронная почта. Это код, который я использую для создания моего намерения SEND.

  Intent shareIntent = new Intent(); 
      shareIntent.setAction(Intent.ACTION_SEND); 
      shareIntent.setType("text/xml"); 
      shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
      startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share_list))); 

Когда я бегу это на тренажере (Android 2.1), раздел прикрепление полученной почты гласит:

Content-Type: ; 

Однако, когда я бегу это на моем Galaxy Nexus (Android 4.2.2), секция крепления гласит:

Content-Type: application/tpl; 

Это может быть потому, что пропущенный URI заканчивается в .tpl.

Это то, что я ожидал бы:

Content-Type: text/xml; 

Я пропускаю что-то здесь? Важно, чтобы почтовое вложение имело правильный тип MIME, поэтому я могу использовать фильтры намерений для принимающей стороны приложения.

+0

Вы пытались прикрепить один из этих файлов с помощью приложения электронной почты и посмотреть, что читает раздел вложения? Я думаю, вы получите то же самое. –

+0

Это зависит только от клиента электронной почты. Как упоминалось @ Marina.Eariel, попробуйте подключить файлы непосредственно от разных почтовых клиентов, и вы можете быть удивлены результатами. Способ справиться с этим состоит в том, чтобы иметь пользовательское расширение файла для вашего приложения и использовать фильтр намерений для определения того, какие файлы он должен обрабатывать. – adrianp

+0

это приложение работает в устройстве не эмулятор, потому что в эмуляторе нет электронной почты app.try это в устройстве. –

ответ

0

Я думаю, что вы имеете в виду типы веб-контента,

Вы должны иметь этот тип в вашем случае (электронная почта/сообщение) i.setType("message/rfc822");

посмотреть post

Я надеюсь, что это будет делать ..

0

для чего приложение этот код работает ... как приложение нуждается в немногих подробностях, чем данные. Так вот сделка

       Intent waIntent = new Intent(Intent.ACTION_SEND); 

           waIntent.setType("text/plain"); 
           waIntent.setPackage("com.whatsapp"); 
           waIntent.setType("image/*"); 
           waIntent.putExtra(Intent.EXTRA_TEXT, INFO); 
           waIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(file_PATH))); 


           startActivity(Intent.createChooser(waIntent, "Share with Whatsapp")); 

       for other such as gmail or any mail - just remove the package and set type whatever you like an iamge or file or anything that it supports,for bluetooth it works too...and for whats app i shared the code with you. 

надеюсь, что все это поможет вам

0

У меня есть несколько предложений.

  1. использование комплектData вместо кластьExtra. Или вы уже используете setData для чего-то еще? В любом случае задайте тип mime ПОСЛЕ того, как вы установили данные. из документов setdata: «Задайте данные, на которых работает это намерение. Этот метод автоматически очищает любой тип, который был ранее задан setType (String) или setTypeAndNormalize (String)». http://developer.android.com/reference/android/content/Intent.html#setData(android.net.Uri)

  2. использование комплектType последующий вы используете кластьExtra. Возможно, когда вы используете putExtra, тип mime (ошибочно) выводится из данных, перезаписывая тип mime, который вы только что установили.

  3. использование комплектDataAndType (Uri данные, String type). Документы говорят, что вы редко должны использовать его, потому что тип mime должен быть выведен из данных, но если это не сработает для вас, вы все равно можете попробовать это. из документов: «Этот метод очень редко используется - он позволяет переопределить тип MIME, который обычно выводится из данных с вашим собственным типом, указанным здесь."http://developer.android.com/reference/android/content/Intent.html#setDataAndType(android.net.Uri,%20java.lang.String)

EDIT: Предложений выше для установки правильного типа контента, а не для получения только по электронной почте приложения, чтобы показать в окне приложения CHOOSER Там нет правильного пути в Android получить только приложение электронной почты в. диалоговое окно выбора приложения. В вашем приложении может и должен указываться только тип контента, который вы хотите отправить, другие приложения могут указать, могут ли они отправлять ваш тип контента. Это может быть приложение электронной почты, но также, например, «что такое приложение». Почему вы хотите ограничить возможность пользователя отправлять файл в приложения электронной почты только в любом случае? Если вы хотите, чтобы файл отправлялся на определенный адрес электронной почты, это не так, тогда вы должны установить адрес электронной почты получателя в намерении , тогда будут отображаться только приложения электронной почты в диалоговом окне выбора приложения.

Смежные вопросы