Android支持双屏异显。
adb shell am start -n com.android.demo/com.android.demo.MainActivity --display 1
在am start命令后面增加–display 1
display 1,表示显示在第二块屏上;
display 0,表示第一块屏幕;
Presentation的作用就是将内容显示在辅助屏幕或者第二块屏幕上。详细见谷歌官网说明:
https://developer.android.com/reference/android/app/Presentation
代码实现:
public class DifferentDisplay extends Presentation {
private static final String TAG = "DifferentDisplay";
private static Context mContext;
public DifferentDisplay(Context outerContext, Display display) {
super(outerContext, display);
mContext = outerContext;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.displaytwo);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Dispaly 1"
android:layout_gravity="center"/>
</LinearLayout>
public class MainActivity extends Activity {
DisplayManager mDisplayManager;
Presentation mPresentation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDisplayManager = (DisplayManager) this.getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = mDisplayManager.getDisplays();
if( null == mPresentation ){
mPresentation = new DifferentDisplay(this,displays[displays.length - 1]);
mPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
mPresentation.show();
}
}
}
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>
这样DifferentDisplay 的UI就以一个窗口的形式显示在第二块屏幕上。
startActivity()指定activity运行在哪个屏幕上:
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(1); //这里一直display0是第一块屏;display1是第二块屏
Intent secondIntent = new Intent();
ComponentName cn= new ComponentName("com.android.demo","com.android.demo.SecondActivity");
secondIntent .setComponent(cn);
secondIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(secondIntent, options.toBundle());
<activity
android:name=".SecondActivity"
android:label="@string/app_name"
android:resizeableActivity="true"
>
当Android系统不支持或者需要某个属性特征时才允许显示 secondary displays,可能会出现的报错:
不支持显示在secondary displays上。
不支持multi-display显示。
类似于双屏异显的特性是通过/system/etc/permissions/下面的xml配置文件来进行控制的。
多屏显示的特性xml文件:
\frameworks\native\data\etc\android.software.activities_on_secondary_displays.xml
android.software.activities_on_secondary_displays.xml文件:
<permissions>
<feature name="android.software.activities_on_secondary_displays" />
</permissions>
1、需要将android.software.activities_on_secondary_displays.xml文件拷贝到/system/etc/permissions/下面,双屏异显才可生效。否则就会报错。adb push命令。
2、或者在编译时在mk文件中增加编译脚本:
PRODUCT_COPY_FILES += frameworks/native/data/etc/android.software.activities_on_secondary_displays.xml : system/etc/permissions/android.software.activities_on_secondary_displays.xml重新编译系统生效。
关于安卓hasSystemFeature及系统特性配置,请参考文章:
https://blog.csdn.net/lzpdz/article/details/51841213