安卓:发送邮件/短信/鸣叫与Intent.ACTION_SEND / requestCode / r

2019-08-20 06:44发布

我使用下面的代码:

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为的什么王我应该期待什么? 如何正确地抓住它? 我应该在哪里把这些代码? 任何代码段将是非常有益这里。

提前致谢。

Answer 1:

我知道它已经有相当一段时间,因为你问到这个问题,并在此期间,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在您的清单。

另一种方法是使用PackageManagerqueryIntentActivities()以使自己的选择器。 这将允许您以编程方式获取用户的选择。 该方法描述于本 StackOverflow的讯息。

为了解决您的问题关于startActivityForResult ,从Android的源代码,你可以看到, Activity中是选择Intents没有setResult()在所有。 因此,如果你试图抓住一个结果代码onActivityResult ,它将始终是0( RESULT_CANCELED )。 因此,使用startActivityForResult ,你不能确定用户是否选择一个选项或推压回去。



文章来源: Android: Sending a Mail/SMS/Tweet with Intent.ACTION_SEND / requestCode / resultCode?