0

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

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())
            }
        }

    }
4

2 回答 2

2

在检查了这个答案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));

活动A

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

 val intent = Intent("FINISH_ACTIVITY")
 LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
于 2021-03-13T03:08:43.820 回答
1

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

于 2021-03-15T12:42:40.347 回答