android studio邮件,Android Studio mailto Intent doesn't show subject and mail body

开发者分享了在Android Studio中尝试通过 ACTION_VIEW 和 ACTION_SENDTO 发送邮件时遇到的问题,包括权限不足和错误日志。代码示例展示了如何正确设置邮件意图(ACTION_SEND),使用邮件选择器,并提供了解决方案,以确保邮件正文和主题显示。

问题

I'm trying to send an e-mail from my Android App. With the click on a button, gmail should open and show a new email with my previously defined recipient, subject and email body. So far I've tried sending the Intent.ACTION_VIEW as well as Intent.ACTION_SENDTO. Both show my draft with the recipient only. Both subject and message are being opressed. Weird thing is when using the emulator, it works just fine. Also was trying to lock at the android errorlog. Seems like i don't have permission. Is it really a permission problem or could it be something else?

I'd really appreciate any help

cheers

Here is my code:

sending email via ACTION_VIEWIntent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:" + to));

intent.putExtra(intent.EXTRA_SUBJECT, subject);

intent.putExtra(intent.EXTRA_TEXT, message);

mainActivity.startActivity(intent);

sending email via ACTION_SENDTOIntent email = new Intent(Intent.ACTION_SENDTO);

email.setType("message/rfc822");

email.putExtra(Intent.EXTRA_EMAIL, new String[]{to});

email.putExtra(Intent.EXTRA_SUBJECT, subject);

email.putExtra(Intent.EXTRA_TEXT, message);

mainActivity.startActivity(Intent.createChooser(email, "Choose an Email client :"));

error message from logcat2019-12-13 01:30:35.172 29268-29268/? E//system/bin/webview_zygote32: failed to make and chown /acct/uid_99044: Permission denied

2019-12-13 01:30:35.172 29268-29268/? E/Zygote: createProcessGroup(99044, 0) failed: Permission denied

2019-12-13 01:30:35.206 29289-29289/? E/asset: setgid: Operation not permitted

2019-12-13 01:30:35.226 29296-29296/? E/asset: setgid: Operation not permitted

2019-12-13 01:30:35.355 29268-29268/? E/Typeface: Error mapping font file /system/fonts/NotoSansKhmer-Regular.ttf

2019-12-13 01:30:35.356 29268-29268/? E/Typeface: Error mapping font file /system/fonts/NotoSansKhmer-Bold.ttf

2019-12-13 01:30:35.356 29268-29268/? E/Minikin: Could not get cmap table size!

2019-12-13 01:30:35.356 29268-29268/? E/Typeface: Unable to load Family: null:und-Khmr

2019-12-13 01:30:35.484 29268-29268/? E/Typeface: Error mapping font file /system/fonts/LGAka_Light.ttf

2019-12-13 01:30:35.484 29268-29268/? E/Minikin: Could not get cmap table size!

2019-12-13 01:30:35.484 29268-29268/? E/Typeface: Unable to load Family: lg-lgaka:null

2019-12-13 01:30:35.816 29342-29342/? E//system/bin/webview_zygote32: failed to make and chown /acct/uid_99045: Permission denied

2019-12-13 01:30:35.816 29342-29342/? E/Zygote: createProcessGroup(99045, 0) failed: Permission denied

2019-12-13 01:30:35.842 29354-29354/? E/asset: setgid: Operation not permitted

2019-12-13 01:30:35.864 29367-29367/? E/asset: setgid: Operation not permitted

2019-12-13 01:30:36.139 29342-29342/? E/Typeface: Error mapping font file /system/fonts/NotoSansKhmer-Regular.ttf

2019-12-13 01:30:36.139 29342-29342/? E/Typeface: Error mapping font file /system/fonts/NotoSansKhmer-Bold.ttf

2019-12-13 01:30:36.139 29342-29342/? E/Minikin: Could not get cmap table size!

2019-12-13 01:30:36.139 29342-29342/? E/Typeface: Unable to load Family: null:und-Khmr

2019-12-13 01:30:36.362 29342-29342/? E/Typeface: Error mapping font file /system/fonts/LGAka_Light.ttf

2019-12-13 01:30:36.362 29342-29342/? E/Minikin: Could not get cmap table size!

2019-12-13 01:30:36.362 29342-29342/? E/Typeface: Unable to load Family: lg-lgaka:null

2019-12-13 01:30:36.523 4349-4359/? E/GBMv2: FPS Scaler: EXP

2019-12-13 01:30:36.602 29342-29342/? E/WebViewFactory: can't load with relro file; address space not reserved

2019-12-13 01:30:37.058 29220-29220/? E/Gmail: Gmail:EditWebView JS Console: b/119949571:draft.editor.onLoad; source: file:///android_asset/draft_editor_gmail_compiled.js at 89

2019-12-13 01:30:37.146 29220-29220/? E/Gmail: Gmail:EditWebView JS Console: b/119949571:draft.editor.onLoad is finished; source: file:///android_asset/draft_editor_gmail_compiled.js at 90

回答1:

try out this code, it worked for me.

Intent intent = new Intent(Intent.ACTION_SENDTO);

intent.setData(Uri.parse("mailto:")); // only email apps should handle this

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{email});

intent.putExtra(Intent.EXTRA_SUBJECT, "Subject here");

intent.putExtra(Intent.EXTRA_TEXT,"Body Here");

if (intent.resolveActivity(getPackageManager()) != null) {

startActivity(intent);

}

also add intent filter in android manifest.

回答2:

I think we had the same issue. Android API 29 introduced some improvements about sending data to other apps. See more details here: Sending simple data to other apps

Here is the solution that works for me.

Intent selectorIntent = new Intent(Intent.ACTION_SENDTO);

selectorIntent.setData(Uri.parse("mailto:"));

final Intent emailIntent = new Intent(Intent.ACTION_SEND);

emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"address@mail.com"});

emailIntent.putExtra(Intent.EXTRA_SUBJECT, "The subject");

emailIntent.putExtra(Intent.EXTRA_TEXT, "The email body");

emailIntent.setSelector( selectorIntent );

activity.startActivity(Intent.createChooser(emailIntent, "Send email..."));

In few words, with this you are asking for the Android standard app chooser and, in addition, you specify that you want to send an email. So, as result, email clients will appear only.

If user has one email client installed only, the intent will redirect to it instantly.

Hope this helps you too.

回答3:

try this code

val emailIntent = Intent(Intent.ACTION_SEND)

emailIntent.setType("text/plain")

emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf("jon@example.com"))

emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject")

emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text")

val packageManager = packageManager

val activities = packageManager.queryIntentActivities(emailIntent, 0)

val isIntentSafe = activities.size > 0

if (isIntentSafe) {

startActivity(emailIntent);

}else{

Log.d("MainActivty","Email App not installed");

}

回答4:

Our old code for emails stopped working some days ago.

It was the following:

public static void shareTextToEmail(Context context, String[] email, String subject, String text)

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + TextUtils.join(",", email)));

emailIntent.putExtra(Intent.EXTRA_EMAIL, email);

emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);

emailIntent.putExtra(Intent.EXTRA_TEXT, text);

try {

context.startActivity(Intent.createChooser(emailIntent, context.getString(R.string.share_email_title)));

} catch (android.content.ActivityNotFoundException e) {

Toast.makeText(context, context.getString(R.string.share_no_intent_handler_found), Toast.LENGTH_SHORT).show();

}

}

I've adopted it according to the Zak.Antonio answer:

public static void shareTextToEmail(Context context, String[] email, String subject, String text)

Intent selectorIntent = new Intent(Intent.ACTION_SENDTO);

selectorIntent.setData(Uri.parse("mailto:"));

final Intent emailIntent = new Intent(Intent.ACTION_SEND);

emailIntent.putExtra(Intent.EXTRA_EMAIL, email);

emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);

emailIntent.putExtra(Intent.EXTRA_TEXT, text);

emailIntent.setSelector(selectorIntent);

try {

context.startActivity(Intent.createChooser(emailIntent, context.getString(R.string.share_email_title)));

} catch (android.content.ActivityNotFoundException e) {

Toast.makeText(context, context.getString(R.string.share_no_intent_handler_found), Toast.LENGTH_SHORT).show();

}

}

The key points are:

Replace Intent.ACTION_SENDTO with Intent.ACTION_SEND in emailIntent

Move Intent.ACTION_SENDTO to a selectorIntent

Do not put emails in intent data, put them only in extras at Intent.EXTRA_EMAIL

来源:https://stackoverflow.com/questions/59314608/android-studio-mailto-intent-doesnt-show-subject-and-mail-body

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值