【问题标题】:Is there any way to kill an activity when its in picture-in-picture mode from another activity?当另一个活动处于画中画模式时,有什么方法可以杀死一个活动?
【发布时间】:2021-06-10 09:23:58
【问题描述】:

我有两个活动 ActivityA 和 ActivityB(这个启用了 pip 模式) 当 ActivityB 处于点子模式时,ActivityA 现在来到前台我想从 ActivityA 完成/销毁/杀死 ActivityB strong> 有什么办法吗?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        val supportsPIP = context!!.packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
       
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            if (supportsPIP) {
                enterPictureInPictureMode(mPictureInPictureParamsBuilder!!.build())
            }
        }

    }

【问题讨论】:

  • 到目前为止必须尝试什么来终止活动?
  • 使用 LocalBroadcastManager 确实解决了这个问题

标签: android kotlin picture-in-picture android-picture-in-picture


【解决方案1】:

在检查了这个答案https://stackoverflow.com/a/56896347/13373099 之后,我意识到我所要做的就是使用 LocalBroadcastManager 如果有人在执行此操作时遇到问题,这就是我所做的

在活动B中 私有 val mReceiver = 对象:BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent?) {
    intent?.let { intent ->
            if (intent.action == "FINISH_ACTIVITY") {
                
                finish(); // finish/kill activity also destroys the pip
                
            }}
    }
    
    

现在注册监听器

    LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,  IntentFilter("FINISH_ACTIVITY));

在ActivityA

只需发送带有意图操作“完成活动”的广播

 val intent = Intent("FINISH_ACTIVITY")
 LocalBroadcastManager.getInstance(this).sendBroadcast(intent)

【讨论】:

    【解决方案2】:

    另一种方法是将 Activity 的引用保存在单例中,当你想杀死它时,你调用 finish() 并再次将引用设置为 null。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2011-10-20
      • 1970-01-01
      相关资源
      最近更新 更多