安卓双屏异显,以及相关的一些问题。

要想实现安卓的双屏异显,首先得有双屏。(在此,默认已经双屏)

DisplayManager manager = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = manager.getDisplays();

获取所有屏幕。主屏幕下标为0。

第一个问题:权限。 安卓6.0以上我们需要动态申请权限,但是这里需要的权限无法动态申请。安卓里面唯二的两个特殊权限

  • SYSTEM_ALERT_WINDOW,设置悬浮窗;
  • WRITE_SETTINGS 修改系统设置

双屏展示 需要申第一个 悬浮窗权限 。申请方法只能  startActivityForResult 。真的是只能。

Intent  intent=new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivityForResult(intent, 999);

权限申请完成,那么继续。要在第二个屏幕上展示页面数据 其实很简单  :

1、继承Presentation  

2、添加到window中

3、展示。完了。

附:https://blog.csdn.net/fu_kevin0606/article/details/79420621     写的挺好,可以照搬。

其余的 就跟我们写activity 很类似。

第二个问题:Context 问题。虽然在创建的时候把关联主屏幕的Activity传进来,但是。在副屏幕的代码逻辑中 view.getContext 却不能 instanceof Activity 。于是乎,上网一番查找,说是跟我们继承的Activity 有关。需要这样做

public  Activity scanForActivity(Context context) {
    if (context == null) return null;
    if (context instanceof Activity) {
        return (Activity) context;
    } else if (context instanceof ContextWrapper) {
        return scanForActivity(((ContextWrapper) context).getBaseContext());
    }
    return null;
}

信心满满的copy,然后run ,然后 打脸。

view.getContext()--->android.app.Presentation$3@aecf506      
(ContextWrapper) view.getContext()--->android.app.Presentation$3@aecf506
((ContextWrapper) view.getContext()).getBaseContext()--->android.app.ContextImpl@23057c7
mContext--->com.example.admin.myapplication.MainActivity@f8b4179

log 发现,我传递进来的context 就是 主屏幕的activity。因此怀疑副屏幕因为继承的不是activity,所有按照这些方法是不能 instance of Activity 的。之所以是怀疑,是因为没有时间去仔细研究的啦。。。

 于是,替换逻辑,将所有view.getContext() 的地方 替换成 mContext。

到此,安卓双屏异显以及遇到的问题,记录完成。

 

 

 

你可能感兴趣的:(安卓双屏异显,以及相关的一些问题。)