应用中的画中画
- 监听回到桌面与打开任务列表的广播
- 收到广播之后,调用 enterPictureInPictureMode 方法进入画中画模式
- 重写活动页面的 onPictureInPictureModeChanged 方法,补充进入画中画模式或退出画中画模式时的处理逻辑
回到桌面与切到任务列表
- 按下主页键会回到桌面,按下任务键会打开任务列表,这两个操作并未提供相应的按键处理方法,而是通过广播发出时间信息。
- 若想知晓是否回到桌面,以及是否打开任务列表,均需收听系统广播Intent.ACTION_CLOSE_SYSTEM_DIALOGS
- 从收到的广播意图中获取原因reason字段,该字段值为 homekey 时表示回到桌面,值为 recentapps 时打开任务列表
清单文件中配置 supportsPictureInPicture
<activity
android:name=".ReturnDesktopActivity"
android:supportsPictureInPicture="true"
android:exported="true">
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null && intent.getAction().equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra("reason");
if (!reason.isEmpty() && (reason.equals("homekey") || reason.equals("recentapps"))) {
// Android8.0开始才提供画中画模式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !isInPictureInPictureMode()) {
PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();
// 设置宽高比例值,第一个参数表示分子,第二个参数表示分母
// 下面的10/5=2,表示画中画窗口的宽度是高度的两倍
Rational ratio = new Rational(10, 5);
builder.setAspectRatio(ratio);
// 进入画中画模式
enterPictureInPictureMode(builder.build());
}
}
}
}
};
案例代码