一台设备有两个屏幕,默认是主屏和副屏都是显示一样的画面。
这里实现让副屏显示其他画面
第一步、申请权限
AndroidManifest.xml
中添加两个权限:
<!-- 显示系统窗口权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<!-- 在 屏幕最顶部显示权限-->
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
因为android 6.0
及之后,android.permission.SYSTEM_OVERLAY_WINDOW
需要系统动态授权才能启用,所以在APP启动时加入如下代码进行动态授权:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
//启动Activity让用户授权
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse( "package:com.xxx.自己的包名"));
startActivityForResult(intent, 1010);
return;
}
}
说明一下:Android8.0及以后只能使用TYPE_APPLICATION_OVERLAY窗口类型来创建悬浮窗。(其它窗口类型在8.0已经被废弃掉)
第二步、副屏显示页面代码
Android 提供了一个叫 Presentation 类,来实现第二屏, 继承 Presentation
实现第二屏,相当于一个特殊的弹窗窗口(具体实现)
public class DifferentDisplay extends Presentation {
public DifferentDisplay(Context outerContext, Display display) {
super(outerContext, display);
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.different_display);
}
}
第三步、使用副屏显示
public class MainActivity extends AppCompatActivity {
DifferentDisplay mPresentation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (mPresentation == null) {
DisplayManager mDisplayManager;// 屏幕管理类
mDisplayManager = (DisplayManager) this.getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = mDisplayManager.getDisplays();
mPresentation = new DifferentDisplay(this, displays[displays.length - 1]);// displays[1]是副屏
mPresentation.show();
}
}
}