android - 获取 Android 中 createChooser 方法的 IntentSender 对象

标签 android android-intent android-pendingintent

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

文档仅说明我可以从 PendingIntent 实例中获取它。在我的情况下,似乎 PendingIntent 不会有任何其他用途。

有没有其他方法可以获取 IntentSender 还是我需要创建 PendingIntent

最佳答案

选择器目标 Intent 不是 PendingIntent。例如,在下面的代码 fragment 中,我声明了 ACTION_SEND 的 Intent ,类型为 text/plain,这是 Intent.createChooser 的目标 Intent 。然后我正在创建另一个 Intent、接收器和一个处理程序,即 PendingIntent,它会在用户从中选择某些内容后调用我的 BroadcastReceiver 的 onReceive选择器。

// Set up the broadcast receiver (preferably as a class member)
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
     @Override
     public void onReceive(Context context, Intent intent) {
         // Unregister self right away
         context.unregisterReceiver(this);

         // Component will hold the package info of the app the user chose
         ComponentName component = intent.getParcelableExtra<ComponentName>(Intent.EXTRA_CHOSEN_COMPONENT);
         // Do something with component
     }
}


Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
intent.setType("text/plain");

// Use custom action only for your app to receive the broadcast
final String shareAction = "com.yourdomain.share.SHARE_ACTION";
Intent receiver = new Intent(shareAction);
receiver.putExtra("test", "test");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
Intent chooser = Intent.createChooser(intent, "test", pendingIntent.getIntentSender());

// Before firing chooser activity, register the receiver with our custom action from above so that we receive the chosen app
context.registerReceiver(broadcastReceiver, new IntentFilter(SHARE_ACTION));

startActivity(chooser);

编辑:

BroadcastReceiver 的情况下,信息嵌入在您作为参数获得的 Intent 中。选择其中一个选项后,检索 Bundle 的附加内容并使用键 Intent.EXTRA_CHOSEN_COMPONENT,您应该能够找到用户选择的内容。

尝试将简单的 Log.d 添加到 onReceive

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

在我的例子中,我得到了

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

对于电报

ComponentInfo{com.google.android.apps.inbox/com.google.android.apps.bigtop.activities.ComposeMessageActivity}

对于收件箱

关于android - 获取 Android 中 createChooser 方法的 IntentSender 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631902/

相关文章:

Android AVD 屏幕出现空白

Android 和幻灯片过渡

android - jack 管理员 : command not found

java - 如果条件满足,如何转到Android中的另一个 Activity ?

android - 未触发的未决 Intent

android - AlarmManager:测试间隔更短

android - 当应用程序从后台清除时,AlarmManager 被丢弃

java - Firebase 删除子 onButtonClick

android - Health Connect - 以编程方式打开应用程序

android - 打开具有特定相册/文件夹的默认照片应用程序