Android:使用Intent.ACTION_SEND / requestCode / resultCode发送邮件/短信/推文?

时间:2009-10-19 09:49:25

标签: android sendmail sendmessage

我正在使用以下代码:

Intent sendMailIntent = new Intent(Intent.ACTION_SEND); 
        sendMailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.Share_Mail_Subject));
        sendMailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.Share_Mail_Text)); 
        sendMailIntent.setType("text/plain");

startActivity(Intent.createChooser(sendMailIntent, "Email / SMS / Tweet ?"));

然后我希望能够区分: 1.我的用户确实已发送电子邮件/短信...或 2.我的用户实际上已按下BACK BUTTON ......并且没有发送任何内容。

有没有办法解决这个问题?

=>我应该使用startActivityForResult启动活动吗?并使用onActivityResult ...

捕获requestCode / resultCode

=>我应该期待什么样的resultCode之王?如何正确抓住它?我应该把这些代码放在哪里?任何代码片段在这里都会非常有用。

提前感谢。

集线器

1 个答案:

答案 0 :(得分:1)

我意识到自从你提出这个问题已经有一段时间了,Android在这段时间内发生了很大的变化。我不确定你是否还在寻找答案,但如果你是,你可以使用新的Intent.createChooser()方法,这需要第三个PendingIntent.getIntentSender()参数和一个{{1} }。这是你如何做到的:

BroadcastReceiver

请注意,Intent sendMailIntent = new Intent(Intent.ACTION_SEND); sendMailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.Share_Mail_Subject)); sendMailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.Share_Mail_Text)); sendMailIntent.setType("text/plain"); Intent receiver = new Intent(this, BroadcastTest.class); receiver.putExtra("test", "test"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT); Intent chooser = Intent.createChooser(intent, "test", pendingIntent.getIntentSender()); startActivity(chooser); 意图的目标是扩展receiver的{​​{1}}类。当用户从选择器中选择应用程序时,将调用BroadcastTest中的BroadcastReceiver方法,如果用户按下,则不会调用onReceive。这样,您可以检查用户是否确实发送了电子邮件/短信/推文,或者他们是否已经回复。例如,如果这是我的BroadcastTest类:

onReceive

如果用户选择了应用程序Telegram,您将在日志中获得类似BroadcastTest的内容。使用密钥public class BroadcastTest extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { for (String key : intent.getExtras().keySet()) { Log.d(getClass().getSimpleName(), " " + intent.getExtras().get(key)); } } } ,您应该能够找到用户选择的内容。另外,不要忘记在清单中声明ComponentInfo{org.telegram.messenger/org.telegram.ui.LaunchActivity}

另一种方法是使用android.intent.extra.CHOSEN_COMPONENTBroadcastReceiver制作您自己的选择器。这将允许您以编程方式获取用户选择。该方法在this StackOverflow post。

中描述

要解决有关PackageManager的问题,请从Android的来源,您可以看到queryIntentActivities()中选择的startActivityForResult根本不会Activity。因此,如果您尝试在Intents中捕获结果代码,它将始终为0(setResult())。因此,使用onActivityResult,您无法确定用户是选择了选项还是后退。