2012-03-14 20 views
6

Çeşitli Android uygulamalarında, e-posta için bir uygulama seçiciyi göstermek için aşağıdaki kodu kullanıyorum ve kullanıcı uygulamalardan birine karar verdikten sonra, önceden tanımlanmış bir metni E-posta formu: For döngüsü içindeÖnceden belirlenmiş metinde satır sonlarını göz ardı eden e-posta amacı (Android)

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
emailIntent.setType("plain/text"); 
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Sample subject"); 
String contentStr = ""; 
for (Object o : mArrayList) { // mArrayList: ArrayList<Object> 
    content = contentStr+o.toString()+"\n"; 
} 
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, backupStr); 
startActivity(Intent.createChooser(emailIntent, "Choose application")); 

, nesnelerin dize çıkışı geçici dize 'contentStr' ile birleştirilmiş. Her nesneden sonra, bir satır sonu ("\ n") olmalıdır.

Bu kodu telefonumda test ettiğimde, iyi çalışıyor ve her nesnenin kendi çizgisi var.

Ancak kullanıcılar, e-posta uygulamasının (Android standardı) her şeyi tek bir satıra eklediğini ve satır sonlarını yoksayar.

Yanlış bir şey yapıyorum? Ya da bu hata raporunu geliştiricinin çözebileceği bir konu olarak görmezden gelebilir miyim?

+2

"Düz/metin" yerine "text/plain" deneyebilirsiniz. Ayrıca, tüm bu birleştirmeyi yapmak yerine 'StringBuilder' kullanmalısınız. Yine de, ya probleminize yardımcı olacağına şüphem var. – CommonsWare

+0

Teşekkürler! Ancak "text/plain" un bir dezavantajını görmek için lütfen aşağıdaki yorumlarımı inceleyin. Marco W. işaret ettiği gibi – caw

+1

, "message/rfc822" e-postalar için doğru mim türü – njzk2

cevap

3

2 potansiyel müşteriler:

  • \ r veya \ n \ r yerine basitçe \ n, hatta 2 satır sonları ile deneyin.
  • Kullanım HTML biçimli satır sonları Bu niyet içinde bir şey koymaz

    String contentStr = ""; 
    for (Object o : mArrayList) { // mArrayList: ArrayList<Object> 
        content = contentStr+o.toString()+"\n"; 
    } 
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, backupStr); 
    

    senin buraya koduyla yanlış bir şey var (<br>)

  • Ayrıca

, contentStr boş ve içerik sadece son nesneyi içerir.

contentStr = TextUtils.join("\n", mArrayList); 
+3

TextUtils.join() ile alternatif için çok teşekkür ederim.' \ N 'kullandım çünkü bu Linux (ve diğerleri için) ve \ n 'Windows (ve diğerleri için), değil mi? Wikipedia, Java'da satır sonları için System.getProperty (" line.separator ")' ın kullanılmasını önerir.Bu iyi bir çözüm mü? – caw

+0

olduğunu düşünüyorum. Bu, üzerinde bulunduğunuz sistem tarafından kullanılan satır ayırıcıyı vermesi gerekiyordu. Ancak, android linux tabanlı, bu yüzden her zaman olmalıdır '\ n'. Sorunu yeniden üretebildiniz mi? – njzk2

0

kullanım:

Intent emailIntent = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:[email protected]")); 
       emailIntent.setType("text/plain"); 
       emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); 
       emailIntent.putExtra(Intent.EXTRA_TEXT, msg); 
       emailIntent.putExtra(Intent.EXTRA_SUBJECT, "This is my Error Report"); 

Ve:

emailIntent.setType("text/plain"); 

ACTION_SEND

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
emailIntent.setType("text/plain"); 
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Sample subject"); 
String contentStr = ""; 
for (Object o : mArrayList) { // mArrayList: ArrayList<Object> 
    content = contentStr+o.toString()+"\n"; 
} 
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, backupStr); 
startActivity(Intent.createChooser(emailIntent, "Choose application")); 
+0

Teşekkür ederiz! "Text/plain" kullandığımda, uygulama seçici metin mesajlarını işleyebilecek tüm uygulamaları gösterir (ör. SMS, Facebook). Ancak eski "düz/metin" özelliğini kullandığımda, yalnızca e-posta uygulamaları görünür.Bu neden böyle? Sadece e-posta uygulamalarını istiyorum. – caw

+1

@MarcoW .: 'plain/text' sadece size e-posta uygulamaları vermez. Kullanıcının, geçersiz MIME türlerini ele alan yüklediği her şeyi size verir. Bir şeyi e-postayla sınırlamak istiyorsanız, "ACTION_SENDTO" ve bir "mailto:" Uri "kullanın. – CommonsWare

+1

Teşekkürler! "ACTION_SENDTO" benim için çalışmıyor. Ama ben MIME türü olarak "message/rfc822" kullanarak yardımcı olduğunu buldum. Bu e-posta göndermek için doğru olanı mı? – caw

0

Emin olmak için aşağıdaki alamadım SMS gibi bir şey kullanmak/Twitter/Facebook uygulamaları orada Burada String msg, StringBuilder kullanılarak yapıldı ve \ n for l Ine molalar. Temel olarak, MIME tipinizi değiştirmeniz gerektiğini düşünüyorum ve siz de ayarlanacaksınız.

+0

Çok teşekkür ederim! StringBuilder iyi bir ipucu. Lütfen yorumumu Jorgesys'in cevabına bakın. Ek Uri.parse() 'niz bile çalışmıyor :( – caw

0

Sen \n bile EXTRA_TEXT koymak <br/> için değiştirmek gerekir:

Bu, daha iyi, daha kısa ve daha verimli bir yöntemdir. Benim kodum:

İlgili konular