我使用下面的代码:
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,我的用户确实发送电子邮件恩/ SMS ......或者2.我的用户实际上已被推回退按钮...并没有发送任何东西。
有没有一种方法,使这种差异?
=>我应该用startActivityForResult开始练习? 并赶上与onActivityResult的requestCode / resultCode为...
=> resultCode为的什么王我应该期待什么? 如何正确地抓住它? 我应该在哪里把这些代码? 任何代码段将是非常有益这里。
提前致谢。
毂
我知道它已经有相当一段时间,因为你问到这个问题,并在此期间,Android已经改变了不少。 我不知道如果你还在寻找一个答案,但如果你是,你可以用新做Intent.createChooser()
方法,这需要第三PendingIntent.getIntentSender()
的说法,和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
的意图是BroadcastTest
延伸类BroadcastReceiver
。 当用户选择从选择器的应用中, onReceive
在方法BroadcastTest
将被调用,并且如果用户按下回, onReceive
将不被调用。 通过这种方式,可以检查用户是否确实发送了一封电子邮件/短信/鸣叫,或者如果他们压回。 例如,如果这是我的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_COMPONENT
,你应该能够找到用户挑选什么。 另外,不要忘了申报BroadcastReceiver
在您的清单。
另一种方法是使用PackageManager
和queryIntentActivities()
以使自己的选择器。 这将允许您以编程方式获取用户的选择。 该方法描述于本 StackOverflow的讯息。
为了解决您的问题关于startActivityForResult
,从Android的源代码,你可以看到, Activity
中是选择Intents
没有setResult()
在所有。 因此,如果你试图抓住一个结果代码onActivityResult
,它将始终是0( RESULT_CANCELED
)。 因此,使用startActivityForResult
,你不能确定用户是否选择一个选项或推压回去。
文章来源: Android: Sending a Mail/SMS/Tweet with Intent.ACTION_SEND / requestCode / resultCode?