Nea*_*eal 24 android android-intent xamarin.android
我的应用程序集成了电子邮件,用户可以直接从应用程序提交错误报告,反馈等.我正在使用application/octet-stream作为Intent的SetType.当您提交电子邮件时,您将获得内容选择器,并显示来自Evernote,Facebook,电子邮件等的各种项目.
如何让此选择器仅显示电子邮件,以免将用户与适合内容选择器类型的所有其他项目混淆?
谢谢.
Ped*_*ela 32
我用简单的代码行解决了这个问题,如android文档说明(https://developer.android.com/guide/components/intents-common.html#Email)
最重要的是旗帜:它是ACTION_SENDTO,而不是ACTION_SEND
另一条重要的路线是
intent.setData(Uri.parse("mailto:")); ***// only email apps should handle this***
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果你发送一个空的Extra,if()最后将无法正常工作,应用程序将无法启动电子邮件客户端.
这适合我.根据Android文档.如果您想确保仅通过电子邮件应用程序(而不是其他文本消息或社交应用程序)处理您的意图,请使用ACTION_SENDTO操作并包含"mailto:"数据方案.例如:
public void composeEmail(String[] addresses, String subject) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
Com*_*are 14
我假设你正在使用这个ACTION_SEND Intent动作,因为你没有真正说出你正在使用的内容,但是你同意了@Aleadam的评论.
我正在使用application/octet-stream作为Intent的SetType.
该句中没有任何内容限制电子邮件的内容.
ACTION_SEND是Intent任何想要的应用程序都可以支持的通用操作.您所做的只是指示您要共享的数据以及该数据的MIME类型 - 从那里,用户可以从可用活动中进行选择.
正如@Jasoon所指出的,您可以尝试message/rfc822MIME类型.但是,这并不表示"仅提供电子邮件客户端" - 它表示"提供支持message/rfc822数据的任何内容".这可能很容易包括一些非电子邮件客户端的应用程序.
如果您特别想通过电子邮件发送内容,请将JavaMail集成到您的应用程序中,或者在Web服务器上编写电子邮件转发脚本并调用它或其他内容.如果您使用ACTION_SEND,则隐含地声明用户想要的是重要的,并且您希望用户能够通过用户选择的任何方式发送某些数据.
在实施Magic Link功能时,一直在努力解决这个问题,这是一个针对所有已安装的电子邮件应用的选择器意图:
private void openEmailApp() {
List<Intent> emailAppLauncherIntents = new ArrayList<>();
//Intent that only email apps can handle:
Intent emailAppIntent = new Intent(Intent.ACTION_SENDTO);
emailAppIntent.setData(Uri.parse("mailto:"));
emailAppIntent.putExtra(Intent.EXTRA_EMAIL, "");
emailAppIntent.putExtra(Intent.EXTRA_SUBJECT, "");
PackageManager packageManager = getPackageManager();
//All installed apps that can handle email intent:
List<ResolveInfo> emailApps = packageManager.queryIntentActivities(emailAppIntent, PackageManager.MATCH_ALL);
for (ResolveInfo resolveInfo : emailApps) {
String packageName = resolveInfo.activityInfo.packageName;
Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName);
emailAppLauncherIntents.add(launchIntent);
}
//Create chooser
Intent chooserIntent = Intent.createChooser(new Intent(), "Select email app:");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, emailAppLauncherIntents.toArray(new Parcelable[emailAppLauncherIntents.size()]));
startActivity(chooserIntent);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25070 次 |
| 最近记录: |