【问题标题】:Arguments for a BroadcastReceiver used inside Intent.createChooser()在 Intent.createChooser() 中使用的 BroadcastReceiver 的参数
【发布时间】:2021-02-23 23:57:15
【问题描述】:

我的应用上有很多分享按钮。当按下共享按钮时,会向用户显示一个选择器,以便他可以选择一个应用程序来共享内容。我想知道用户选择了什么,所以我决定使用 BroadcastReceiverIntent.createChooser() 方法。

但我在应用中有多个分享按钮,所以我定义了以下类:

class MyBroadcastReceiver(val listener: MyBroadcastReceiverListener) : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        listener.handleShare()
    }

    interface MyBroadcastReceiverListener {
        fun handleShare()
    }
}

我想从实现MyBroadcastReceiverListener(Activity1、Activity2、Activity3 等)的不同地方使用这个类,这样我就可以在每个地方对override fun handleShare() 执行相应的任务。我面临的问题是在使用Intent.createChooser() 之前我必须这样做。

var receiver = Intent(this, MyBroadcastReceiver::class.java) // how can I pass args ???? ?
var pi = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT)
Intent.createChooser(..., ..., pi.getIntentSender());

因为我必须以静态方式提供MyBroadcastReceiver,所以我无法将参数(在这种情况下为侦听器)传递给MyBroadcastReceiver。有没有办法解决这个问题?感谢您的支持! ????

【问题讨论】:

    标签: android kotlin android-intent broadcastreceiver android-pendingintent


    【解决方案1】:

    故事:在用户从应用选择器对话框中选择应用后运行一段代码。您不应该将您的活动作为侦听器传递,因为这可能会泄漏活动(应用程序可能会保留对活动的引用,即使它已被销毁)。

    解决方案:使用EventBus 来实现您的目标。

    第 1 步:通过 gradle 将 EventBus 添加到您的项目中

    implementation 'org.greenrobot:eventbus:3.2.0'
    

    第 2 步:定义事件

    object OnShareEvent
    

    第 3 步:在您的 Activity 中注册/取消注册监听事件,例如 Activity1。

    override fun onStart() {
        super.onStart()
        EventBus.getDefault().register(this)
    }
    
    override fun onStop() {
        super.onStop()
        EventBus.getDefault().unregister(this)
    }
    
    @Subscribe(threadMode = ThreadMode.MAIN)
    fun handleShare(event: OnShareEvent) {
        // TODO: Your code logic goes here
    }
    

    第 4 步:发布活动

    class MyBroadcastReceiver : BroadcastReceiver() {
    
        override fun onReceive(context: Context, intent: Intent) {
            EventBus.getDefault().post(OnShareEvent)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多