android 双屏异显 副屏幕不随主屏幕退出(转载)

Android双屏是克隆模式,如果要在第二屏幕显示不同内容,需要自定义一个Presentation类

1.设置权限

<!-- 显示系统窗口权限 -->
<uses-permission android:name= "android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 在 屏幕最顶部显示addview-->
<uses-permission android:name= "android.permission.SYSTEM_OVERLAY_WINDOW"  />
2.自定义类 继承Presentation 

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()返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁

4.如果点击home键,辅屏依然显示内容 就把3中的代码写在服务中(服务在清单中注册哦)然后在调用的地方开启服务

    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();
}

}  
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值