3

我正在使用以下代码:

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.我的用户实际上已经按下了返回按钮......并且没有发送任何东西。

有没有办法使这种差异?

=> 我应该使用 startActivityForResult 启动活动吗?并使用 onActivityResult 捕获 requestCode/resultCode ...

=> 我应该期待什么结果代码之王?如何正确抓住它?我应该把这些代码行放在哪里?任何代码片段在这里都会很有帮助。

提前致谢。

中心

4

1 回答 1

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。当用户从选择器中选择一个应用程序时,将调用onReceivein 的方法,如果用户按下返回,则不会调用该方法。这样,您可以检查用户是否确实发送了电子邮件/短信/推文,或者他们是否回击。例如,如果这是我的课:BroadcastTestonReceiveBroadcastTest

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}如果用户选择了 Telegram 应用程序,您会在日志中看到类似的内容。使用 key android.intent.extra.CHOSEN_COMPONENT,您应该能够找到用户选择的内容。另外,不要忘记BroadcastReceiver在清单中声明。

另一种方法是使用PackageManagerqueryIntentActivities()制作您自己的选择器。这将允许您以编程方式获取用户选择。该方法在StackOverflow 帖子中进行了描述。

为了解决您关于 的问题startActivityForResult,从 Android 的源代码中,您可以看到Activity选择的选项Intents根本没有setResult()。因此,如果您尝试在 中捕获结果代码onActivityResult,它将始终为 0 ( RESULT_CANCELED)。因此,使用startActivityForResult,您无法确定用户是选择了选项还是按下了返回。

于 2016-07-13T04:41:54.970 回答