我正在使用以下代码:
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之王?如何正确抓住它?我应该把这些代码放在哪里?任何代码片段在这里都会非常有用。
提前感谢。
集线器
答案 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_COMPONENT
和BroadcastReceiver
制作您自己的选择器。这将允许您以编程方式获取用户选择。该方法在this StackOverflow post。
要解决有关PackageManager
的问题,请从Android的来源,您可以看到queryIntentActivities()
中选择的startActivityForResult
根本不会Activity
。因此,如果您尝试在Intents
中捕获结果代码,它将始终为0(setResult()
)。因此,使用onActivityResult
,您无法确定用户是选择了选项还是后退。