在Android中获取createChooser方法的IntentSender对象

pix*_*xel 29 android android-intent android-pendingintent

我想使用新版本的Intent.createChooser方法IntentSender.

文档仅说明我可以从PendingIntent实例中获取它.在我看来,它似乎PendingIntent没有任何其他用途.

有没有其他方法可以获得IntentSender或我需要创建PendingIntent

Bla*_*elt 47

选择目标意图不是PendingIntent.例如,在下面的代码片段中,我声明ACTION_SEND了类型的意图 text/plain,这是我的目标意图Intent.createChooser.然后我创建了另一个Intent接收器和一个处理程序,PendingIntet它将从选择器中选择一个东西后调用onReceiveBroadcastTest.

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
intent.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);
Run Code Online (Sandbox Code Playgroud)

编辑:

信息,如果BroadcastReceiver嵌入在您作为参数获得的意图中.选择其中一个选项后,检索Bundle的附加内容并使用该键android.intent.extra.CHOSEN_COMPONENT,您应该能够找到用户选择的内容.

尝试添加简单Log.donReceive

for (String key : intent.getExtras().keySet()) {
    Log.d(getClass().getSimpleName(), " " + intent.getExtras().get(key));
}
Run Code Online (Sandbox Code Playgroud)

在我的例子中我得到了

ComponentInfo{org.telegram.messenger/org.telegram.ui.LaunchActivity}

Telegram

ComponentInfo{com.google.android.apps.inbox/com.google.android.apps.bigtop.activities.ComposeMessageActivity}
Run Code Online (Sandbox Code Playgroud)

对于 InBox

  • 不要忘记将广播寄存器类添加到清单中 (9认同)
  • 我们做什么,当api水平低于22 (5认同)
  • 是否有任何代码示例,我可以看看如何做到这一点?我的广播接收器没有收到任何东西. (4认同)
  • 我的广播接收器也不起作用.你能否说明你是如何连接广播接收器的?我正在我的活动中注册它,但我不确定将什么用于intent过滤器. (3认同)
  • 1. 此 createChooser 可在 API >= 22 上使用 2. 该方法对我不起作用。onReceive 在选择器打开时立即调用,而在从选择器中选择某些应用程序时不会调用。 (3认同)
  • 另请注意,您的“PendingIntent”标志应为“if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_UPDATE_CURRENT 或 PendingIntent.FLAG_MUTABLE else PendingIntent.FLAG_UPDATE_CURRENT” (2认同)