整体实现的思路是:双屏默认显示一样的东西,点击按钮副屏画面改变,副屏操作点击按钮回到主屏界面。
1. 权限要求。
<!-- 双屏异显权限 -->
<uses-permission android:name= "android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name= "android.permission.SYSTEM_OVERLAY_WINDOW"/>
在onRequestPermissionsResult上添加 @RequiresApi(api = Build.VERSION_CODES.M),代码部分添加:
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 2);
}
代码添加后如下:
2. 自定义类继承Presentation。
public class MainPresentation extends Presentation {
public MainPresentation(Context outerContext, Display display) {
super(outerContext, display);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.presentation_main);
Button btnTest1 = (Button) findViewById(R.id.btn_ceshi1);
btnTest1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MainPresentation.this.dismiss();
}
});
}
}
对应的布局文件:
界面就是一个按钮,点击回到主屏:
3. Activity中声明及点击事件。
获取屏幕数量,当屏幕数量大于1时,才可以将副屏初始化(有位置展示)。
DisplayManager manager = (DisplayManager)getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = manager.getDisplays();
Log.d(TAG, "onCreate: " + displays.length);
if (displays.length > 1) {
mainPresentation = new MainPresentation(this, displays[1]);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && Settings.canDrawOverlays(this)) {
mainPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
} else {
mainPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
}
展示:
mainPresentation.show();
隐藏:
mainPresentation.hide();
释放:
mainPresentation.dismiss();