记录在安卓应用中,应用在后台是弹出对话框或显示一个view在前台界面上相关方法以及参数,效果。

int windowType

对话框的设置

  final AlertDialog dialog = new AlertDialog.Builder(this).setMessage("test dialog").create();dialog.getWindow().setType(windowType);

直接显示一个自定义view的设置

final WindowManager.LayoutParams alertParams = new WindowManager.LayoutParams();alertParams.type = windowType;alertParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;alertParams.width = WindowManager.LayoutParams.MATCH_PARENT;alertParams.height = 300;alertParams.format = PixelFormat.RGBA_8888;final WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);final TextView view = new TextView(getApplicationContext());view.setBackgroundColor(Color.YELLOW);view.setText("test");wm.addView(view, alertParams);//显示view

实现方式是这样子的:一共2个Activity,1个Service

MainActivity onCreate中的代码:

final AlertDialog dialog = new AlertDialog.Builder(<span style="background-color: rgb(255, 255, 102);">getApplicationContext()</span>).setMessage("test activity1  dialog").create();dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);final WindowManager.LayoutParams alertParams = new WindowManager.LayoutParams();alertParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;alertParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;alertParams.width = WindowManager.LayoutParams.MATCH_PARENT;alertParams.height = 300;alertParams.format = PixelFormat.RGBA_8888;final WindowManager wm = (WindowManager) <span style="background-color: rgb(255, 255, 102);">getApplicationContext()</span>.getSystemService(Context.WINDOW_SERVICE);final TextView view = new TextView(getApplicationContext());view.setBackgroundColor(Color.BLUE);view.setText("test");view.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {wm.removeView(v);}});new Handler().postDelayed(new Runnable() {@Overridepublic void run() {wm.addView(view, alertParams);dialog.show();}}, 5000);startService(new Intent(this, Test1Service.class));startActivity(new Intent(this,Test2Activity.class));

Test1Service的主要代码:

final AlertDialog dialog = new AlertDialog.Builder(<span style="background-color: rgb(255, 255, 0);">this</span>).setMessage("test service  dialog").create();dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);final WindowManager.LayoutParams alertParams = new WindowManager.LayoutParams();alertParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;alertParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;alertParams.width = WindowManager.LayoutParams.MATCH_PARENT;alertParams.height = 300;alertParams.format = PixelFormat.RGBA_8888;final WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);final TextView view = new TextView(getApplicationContext());view.setBackgroundColor(Color.YELLOW);view.setText("test");view.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {wm.removeView(v);}});final Handler handler = new Handler();handler.postDelayed(new Runnable() {@Overridepublic void run() {wm.addView(view, alertParams);dialog.show();stopSelf();}}, 3000);

Test2Activity的代码:

final AlertDialog dialog = new AlertDialog.Builder(<span style="background-color: rgb(255, 255, 51);">this</span>).setMessage("test activity2  dialog").create();dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);final WindowManager.LayoutParams alertParams = new WindowManager.LayoutParams();alertParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;alertParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;alertParams.width = WindowManager.LayoutParams.MATCH_PARENT;alertParams.height = 300;alertParams.format = PixelFormat.RGBA_8888;final WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);final TextView view = new TextView(getApplicationContext());view.setBackgroundColor(Color.GREEN);view.setText("test2");view.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {wm.removeView(v);}});new Handler().postDelayed(new Runnable() {@Overridepublic void run() {Log.i(getPackageName(), "显示 activity2");wm.addView(view, alertParams);dialog.show();}}, 7000);

注意黄色背景的地方,有关键的影响。
根据顺序,首先是service的显示,然后MainActivity,最后Test2Activity。

以下所述显示情况为启动后立即返回桌面后的显示情况

1、windowType = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT || WindowManager.LayoutParams.TYPE_SYSTEM_ERROR || WindowManager.LayoutParams.TYPE_TOAST

TYPE_SYSTEM_ALERT 需要权限<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/>

service显示,MainActivity显示,Test2Activity未显示(在4.4以下版本机型上,出现界面显示异常,不知道是不是在虚拟机中的原因,没有真机测试。。。另外,在5.0以上的机型,Test2Activty的对话框和自定义view都显示了)

根据情况来看,是否在后台能弹出显示,关键就是代码中黄色部分所用的是本身的context还是applicationContext(此处说明下,service不管是用本身还是applicationContext,均能弹出显示),这个解释应该就是应用的窗口和单独activity的窗口关系。

TYPE_SYSTEM_ERROR 会遮罩整个屏幕,包括虚拟的“返回”,“HOME"按键

2、windowType = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY

该类型在显示后,用户无法点击到显示的对话框以及自定义view,但能点击到所覆盖的控件,即触摸事件穿透过去了

关于应用窗口和activity窗口的关联,有待研究,后面补充几个type的说明

Android 应用在后台弹出提示相关的笔记1相关推荐

  1. Android中使用Toast弹出提示消息的优化(弹出多个吐丝提示)- 代码已封装可直接使用

    在开发Android APP时经常会使用吐丝提示,如果直接使用[Toast.makeText(context, text, Toast.LENGTH_SHORT).show();]方法,连续弹出吐丝时 ...

  2. android ShareSDK微信收藏弹出提示的修改

     [问题]用 ShareSDK版本为2.7.0 在安卓端集成了社会化分享,只加了通过微信客户端的分享:包括 微信好友分享,微信朋友圈分享,微信收藏. 不管用哪种分享,成功后都会弹出Toast:&quo ...

  3. 双击SDK Manager.exe和AVD Manager.exe时,弹出提示:failed to execute tools\android.bat解决办法

    在Android的虚拟机上出现"no target selected",去android-sdk-windows里面双击SDK Manager.exe和AVD Manager.ex ...

  4. WindowManager解析(二)Android悬浮框无法弹出输入法的原因和无需权限显示悬浮窗

    Android悬浮框无法弹出输入法 最近要研究悬浮窗方面的东西,遇到一个问题,我的悬浮窗里面有一个输入框,但是不弹出输入法,后来找到一个方法: 在WindowManager的实例获取方式不对,之前是这 ...

  5. qtreeview 点击二级节点弹出dialog_Flutter Toast、弹出提示、轻提示

    主流的三种APP反馈形式: toast.snackbar以及dialog. toast通常用于提示用户一些不那么重要的信息, 会弹出并显示文字一段时间. 时间一到就会消失. 相较于snackbar和d ...

  6. Bootstrap3 弹出提示插件的使用方法

    弹出提示 弹出提示(popover.js)是工具提示的子类,它比工具提示多了一个 content 参数,是工具提示插件的拓展. 弹出框依赖于工具提示插件tooltip.js,如果你定制了 Bootst ...

  7. php 右下脚弹窗,JavaScript实现右下角弹出提示框的方法

    在我们日常开发工作中,我们会经常遇到需要在页面的右下角弹出提示框或者广告的小功能,这样是为了更好的让用户体验,那么如何实现网页右下角弹出提示框呢?今天我们就带大家介绍下JavaScript实现右下角弹 ...

  8. 非常优美的弹出提示框SweetAlert

    SweetAlert的简单使用 SweetAlert可以替代JavaScript原生的alert和confirm等函数呈现的弹出提示框,它将提示框进行了美化,并且允许自定义,支持设置提示框标题.提示类 ...

  9. Android编程:底部弹出输入框

    Android编程:底部弹出的对话框 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:Android Studio ...

  10. Android判断软键盘弹出并隐藏的简单完美解决方案

    Android判断软键盘弹出并隐藏的简单完美解决方案 参考文章: (1)Android判断软键盘弹出并隐藏的简单完美解决方案 (2)https://www.cnblogs.com/thare1307/ ...

最新文章

  1. BZOJ1566:[NOI2009]管道取珠——题解
  2. linux shell 从变量中按指定字符切割字符串
  3. leetcode102
  4. HTFS.Software.v7.3-ISO 1DVD(传热模拟,最新完全解密版)
  5. [html] 举例说明当我们在写布局时,都有哪些边界的情况需要关注的?
  6. C++ 运算符重载(一) | 输入/输出,相等/不等,复合赋值,下标,自增/自减,成员访问运算符
  7. php 如何守护进程_PHP 如何实现守护进程
  8. 文博项目-终端网口测试-软件
  9. php创建实例对象数组,php – 使用arguments数组创建新的对象实例
  10. java jdk jvm.cfg_更换JDK版本时的问题:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'...
  11. java代码中的缓存类怎么找,JAVA缓存的实现 - dreamcloudz的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. 再讨论下webdriver
  13. 通过Web.config中的configSections配置自己系统的全局常量
  14. 太原市智能家居行业协会成立
  15. 完善计算机 实践性教学,计算机基础实践性教学分析论文.doc
  16. 公告:软件测试就业课涨价调整暨教学服务升级通知
  17. Base64的编码与解码的实现方法(超详细,每一行代码都含注释)
  18. 二级路由器设置为何要关闭DHCP服务
  19. idou老师教你学Istio: 如何用Istio实现K8S Egress流量管理
  20. keras冻结_keras ”冻结“ 网络层

热门文章

  1. Flask框架学习:蓝图的使用
  2. ANT下载和配置 IDEA
  3. 揪出那些在Windows操作系统中注册的WFP函数
  4. HCIP/HCIE RoutingSwitching / Datacom备考宝典系列(八)VLAN知识点全面总结
  5. 数值积分——梯形公式和Simpson公式
  6. Wireshark菜单栏介绍
  7. 英特尔处理器排名_鲁大师公布三季度PC处理器、内存排行榜:AMD成最大赢家
  8. qgc地面站如何导入离线地图_离线地图
  9. Android ICON生成及优化
  10. Dubbo本地存根是什么,Dubbo本地伪装又是什么?