上篇介绍了使用Presentation类来实现多屏异显的方法,由于Presentation继承Dialog,因此无法创建 Fragment、Popupwindow 等组件。
本篇介绍另外一种实现多屏异显的方法,通过StartActivity使新的Activity在副屏启动。
我们可以在上一篇的Domo基础上修改。
首先为了在多个函数中使用将mDisplayManager改为全局变量,然后在onCteate中赋值。
接下来修改原来的PressentationDisplay函数。
然后我们编写newSecondActivity函数用来启动新的Activity在副屏显示。
注意:需要设置通过Intent设置启动的Activity为FLAG_ACTIVITY_NEW_TASK,即新的Activity与mainActivity不在一个线程,只有这样才能保住同时显示在主、副屏幕。
//MainActivity.java
package com.example.multidisplaydomo;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.app.ActivityOptions;
import android.app.Presentation;
import android.content.Context;
import android.content.Intent;
import android.hardware.display.DisplayManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
DisplayManager mDisplayManager;
Display[] displays;
Presentation presentation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button_1 = (Button) findViewById(R.id.button_1);
Button button_2 = (Button) findViewById(R.id.button_2);
button_1.setOnClickListener(this);
button_2.setOnClickListener(this);
mDisplayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
displays = mDisplayManager.getDisplays();
Log.i("MainActivity", "display 0 info " + mDisplayManager.getDisplay(0) );
Log.i("MainActivity", "display 1 info " + mDisplayManager.getDisplay(1) );
}
private void PressentationDisplay() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (displays.length > 1) {
presentation = new MyPresentation(this, displays[1]);
presentation.show();
}
}
}
private void newSecondActivity(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(displays.length > 1) {
Intent intent = new Intent();
intent.setClassName(getPackageNam