测试平台
Platform: RK3399
OS: Android 8.1/9
说明
很多人有双屏异显的需求,之前我们想实现一般有两种方式.:
- Google自带的Presentation
- 从5.1.1开始RK自己实现了一套双屏异显得机制
其实如果用过的人都知道,方式1的局限性太大而方式2的兼容性也不是很好
但是从android8.0开始,google加入了新的双屏异显机制,可以直接启动应用到副屏显示,灵活切兼容性很好.
实现方式
- 通过代码方式:
package com.firefly.myapplication;
import android.annotation.TargetApi;
import android.app.ActivityOptions;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.LauncherApps;
import android.graphics.Rect;
import android.os.Build;
import android.os.UserHandle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@TargetApi(Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityOptions options = null;
options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(1);
Bundle optsBundle = options.toBundle();
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.android.settings","com.android.settings.Settings"));
startActivity(intent,optsBundle);
}
}
其中 options.setLaunchDisplayId(1) 代表设置应用启动所在的屏幕,主屏为0,可以如下获得当前支持的屏幕
DisplayManager mDisplayManager;//屏幕管理类
Display[] displays;//屏幕数组
mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE);
displays =mDisplayManager.getDisplays();
- 通过adb方式:
#启动设置到副屏
am start -W -n com.android.settings/com.android.settings.Settings --display 1
问题
- 提示“应用不支持在辅显示屏上启动”
新建文件/system/etc/permissions/android.software.activities_on_secondary_displays.xml并填入如下内容,保存后重启即可
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<feature name="android.software.activities_on_secondary_displays" />
</permissions>