我有两个活动ActivityA和ActivatyB(这一个启用了pip模式(当ActivityB处于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())
}
}
}
检查此答案后https://stackoverflow.com/a/56896347/13373099我意识到我所要做的只是使用LocalBroadcastManager如果有人在实现这一点时遇到困难,以下是我所做的
活动B
private 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)
另一种方法是将对活动的引用保存在singleton中,当您想终止它时,您可以调用finish()
并将引用再次设置为null。