San*_*art 16 email android inbox android-intent
我正在尝试将按钮链接到邮件应用程序.不发送邮件,只是打开收件箱.
我应该这样做Intent intent = new Intent(...)吗?
如果是这样,那之间应该是什么( )?
Ben*_*Yee 27
如果目标是打开默认电子邮件应用程序以查看收件箱,那么关键是添加意图类别并使用ACTION_MAIN意图,如下所示:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_EMAIL);
getActivity().startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
https://developer.android.com/reference/android/content/Intent.html#CATEGORY_APP_EMAIL
从 Android 11 开始,系统不会为 queryIntentActivities 返回任何内容,因为我们首先需要在查询中(在清单中)添加一个条目,如下所示
<manifest ...>
<queries>
...
<intent>
<action
android:name="android.intent.action.VIEW" />
<data
android:scheme="mailto" />
</intent>
</queries>
...
</manifest>
Run Code Online (Sandbox Code Playgroud)
这是解决方案的 kotlin 版本:
fun Context.openMailbox(chooserTitle: String) {
val emailIntent = Intent(Intent.ACTION_VIEW, Uri.parse("mailto:"))
val resInfo = packageManager.queryIntentActivities(emailIntent, 0)
if (resInfo.isNotEmpty()) {
// First create an intent with only the package name of the first registered email app
// and build a picked based on it
val intentChooser = packageManager.getLaunchIntentForPackage(
resInfo.first().activityInfo.packageName
)
val openInChooser = Intent.createChooser(intentChooser, chooserTitle)
// Then create a list of LabeledIntent for the rest of the registered email apps
val emailApps = resInfo.toLabeledIntentArray(packageManager)
// Add the rest of the email apps to the picker selection
openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, emailApps)
startActivity(openInChooser)
} else {
Timber.e("No email app found")
}
}
private fun List<ResolveInfo>.toLabeledIntentArray(packageManager: PackageManager): Array<LabeledIntent> = map {
val packageName = it.activityInfo.packageName
val intent = packageManager.getLaunchIntentForPackage(packageName)
LabeledIntent(intent, packageName, it.loadLabel(packageManager), it.icon)
}.toTypedArray()
Run Code Online (Sandbox Code Playgroud)
小智 7
这段代码对我有用。它会打开一个选择器,其中包含已注册到设备并直接发送到收件箱的所有电子邮件应用程序:
Intent emailIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:"));
PackageManager pm = getPackageManager();
List<ResolveInfo> resInfo = pm.queryIntentActivities(emailIntent, 0);
if (resInfo.size() > 0) {
ResolveInfo ri = resInfo.get(0);
// First create an intent with only the package name of the first registered email app
// and build a picked based on it
Intent intentChooser = pm.getLaunchIntentForPackage(ri.activityInfo.packageName);
Intent openInChooser =
Intent.createChooser(intentChooser,
getString(R.string.user_reg_email_client_chooser_title));
// Then create a list of LabeledIntent for the rest of the registered email apps
List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();
for (int i = 1; i < resInfo.size(); i++) {
// Extract the label and repackage it in a LabeledIntent
ri = resInfo.get(i);
String packageName = ri.activityInfo.packageName;
Intent intent = pm.getLaunchIntentForPackage(packageName);
intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon));
}
LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[intentList.size()]);
// Add the rest of the email apps to the picker selection
openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
startActivity(openInChooser);
}
Run Code Online (Sandbox Code Playgroud)
要打开它的新任务,请使用以下代码:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_EMAIL);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
是的,可以打开Android默认电子邮件收件箱.
使用此代码:
Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.email");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
此代码有效,您必须先配置Android设备默认邮件.如果您已经配置了邮件,它可以正常工作.否则,它强制关闭NullPointerException.
| 归档时间: |
|
| 查看次数: |
15605 次 |
| 最近记录: |