android双屏是克隆模式,如果要在第二屏幕显示不同内容,需要自定义一个Presentation类
1.设置权限
<!-- 显示系统窗口权限 -->
<uses-permission android:name=
"android.permission.SYSTEM_ALERT_WINDOW"
/>
<!-- 在 屏幕最顶部显示addview-->
<uses-permission android:name=
"android.permission.SYSTEM_OVERLAY_WINDOW"
/>
(Presentation作为Dialog类的扩展,Presentation类提供了一个区域,在其中,您的应用可以在辅助显示屏上显示不同的UI)
public
class
DifferentDislay extends Presentation{
public
DifferentDislay(Context outerContext, Display display) {
super(outerContext,display);
}
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
}
}
3.这段代码就可实现
DisplayManager mDisplayManager;
// 屏幕管理类
mDisplayManager = (DisplayManager)
this
.getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = mDisplayManager.getDisplays();
if
(mPresentation ==
null
) {
mPresentation =
new
DifferentDislay(
this
, displays[displays.length - 1]);
// displays[1]是副屏
mPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mPresentation.show();
}
4.如果点击home键,辅屏依然显示内容 可以不写服务就能实现
second = new SecondScreen(getApplicationContext(),
displays[1]);// displays[1]是副屏
second.getWindow().setType(
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
second.show();
说明:getApplicationContext()返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
intentService = new Intent(MainActivity.this,FirstService.class);
startService(intentService);
5.服务代码
import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.hardware.display.DisplayManager;
import android.os.IBinder;
import android.view.Display;
import android.view.WindowManager;
import android.widget.Toast;
public class HomeService extends Service {
// 获取设备上的屏幕
DisplayManager mDisplayManager;// 屏幕管理器
Display[] displays;// 屏幕数组
DifferentDislay2 mPresentation2; (继承Presentation)
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@SuppressLint("NewApi")
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
//registerHomeandMenuActionReceiver();// 注册监听home键和菜单键的监听广播
// 双屏异显
mDisplayManager = (DisplayManager) this
.getSystemService(Context.DISPLAY_SERVICE);
displays = mDisplayManager.getDisplays();
showView();
}
@SuppressLint("NewApi")
private void showView(){
if (null == mPresentation2) {
mPresentation2 = new DifferentDislay2(getApplicationContext(),displays[1]);// displays[1]是副屏
mPresentation2.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mPresentation2.show();
Toast.makeText(getApplicationContext(), "哈哈哈哈哈", 1000).show();
}
}
}