如何以编程方式关闭画中画

Posted

技术标签:

【中文标题】如何以编程方式关闭画中画【英文标题】:How to close Picture in Picture programmatically 【发布时间】:2020-02-11 18:14:00 【问题描述】:

我在画中画模式下遇到了这个问题,我想在从 PIP 本身以外的其他地方再次打开活动时关闭 PIP(画中画)。不是从关闭按钮。

我想要与 youtube 相同的场景,即当用户单击 PIP(画中画)时,它会打开相同的活动,但是当用户从列表中选择另一个视频时,它会结束前一个 PIP(画中画)并打开一个新的活动。在我的情况下,当我打开一个新视频时,它会恢复我之前播放的视频。

【问题讨论】:

【参考方案1】:

有两种可能的方法来做到这一点:

    如果您有活动访问权限,请将活动移到后面。

    activity.moveTaskToBack(false);
    

From Official Documentation

将包含此活动的任务移到活动的后面 堆。活动在任务中的顺序不变。

    可以将activity恢复到最前面

    Intent intent = new Intent(PipScreenActivity.this, PipScreenActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    activity.startActivity(intent);
    

【讨论】:

我不想回到同样的活动。这将恢复活动 @HuzaifaAsif 官方文档说,“如果另一个视频开始在主屏幕上播放,PIP 窗口会自动关闭。” 我不确定这一点,因为它在我的情况下没有结束。我实际上有一个电视应用程序。当我进入 PIP 模式并打开另一个频道时,上一个频道继续以 PIP 播放。 @HuzaifaAsif 你在用同样的活动吗? 是的。我正在打开相同的活动。【参考方案2】:

活动 A

 Intent intent = new Intent("finish_activity");
            sendBroadcast(intent);

活动 B

 BroadcastReceiver broadcastReceiver = new BroadcastReceiver() 

        @Override
        public void onReceive(Context arg0, Intent intent) 
            String action = intent.getAction();
            if (action.equals("finish_activity")) 
                finish();
            
        
    ;
    registerReceiver(broadcastReceiver, new IntentFilter("finish_activity"));

【讨论】:

以上是关于如何以编程方式关闭画中画的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式关闭 Discord?

如何以编程方式关闭/禁用 NFC?

如何以编程方式关闭通知托盘

如何以编程方式关闭 QFileDialog?

如何以编程方式单击剑道树视图节点[关闭]

如何在Tomcat上以编程方式自行关闭Spring应用程序