当前位置:首页 > 技术心得 > 正文内容

Android的Service中弹出窗口解决方法

xjtudll11年前 (2016-02-01)技术心得19970

参考资料:

http://www.cnblogs.com/fbsk/archive/2011/12/28/2304523.html

http://blog.csdn.net/djun100/article/details/23756681

问题:

我们在使用Service时,经常会碰到这样的情况,比如用一个service做下载,此时service不一定在最前端,有可能是其它的Activity,当下载完成时,如何能弹出对话框,让弹出框在当前activity之上。

解决方法:

一、使用全局提示框(悬浮窗)

1、使用系统的Dialog需要在清单文件中添加权限,否则不会显示出来

android.permission.SYSTEM_ALERT_WINDOW

另外,需要注意的是,某些android手机默认是不允许悬浮窗的,因此即便你添加了系统权限,也没有悬浮窗效果的。

2、在alert show() 调用之前添加以下代码:

dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));

参考代码如下:

Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("提示");

    builder.setMessage("该下车了");

    builder.setNegativeButton("取消", new OnClickListener() {

        @Override

        public void onClick(DialogInterface dialog, int which) {

        }

    });

    builder.setPositiveButton("确定", new OnClickListener() {

        @Override

        public void onClick(DialogInterface dialog, int which) {

        }

    });

    final AlertDialog dialog = builder.create();

    **//在dialog  show方法之前添加如下代码,表示该dialog是一个系统的dialog**

dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));

    new Thread(){

        public void run() {

            SystemClock.sleep(4000);

            hanlder.post(new Runnable() {

                @Override

                public void run() {

                    dialog.show();

                }

            });

            };

    }.start();

}

二、在service中启动一个activity,设置activity主题为dialog,这样看起来像是弹出窗口

  在Service中启动一个activity,这个activity的主题为dialog,需要注意的是在启动Intent时需要加上Intent.FLAG_ACTIVITY_NEW_TASK 否则会报错

1)设置activity的主题为dialog:在AndroidManifest.xml里定义activity时,加上代码android:theme="@android:style/Theme.Dialog"

2)在Service中启动activity:

Intent it =new Intent(this,AlertActivity.class); 
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(it);

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://xjtudll.cn/Exp/385/

标签: Android
分享给朋友:

“Android的Service中弹出窗口解决方法” 的相关文章

Multisim运放输出超过电源电压解决

Multisim运放输出超过电源电压解决

在使用Multisim自带库里的运放的时候,例如LM324M,发现一个问题,运放的输出电压能达到几百V甚至几千V,而电源明显只有几V而已。输出电压超过电源电压,理论上是不可能的,实际上也是不可能的,那么肯定就是仿真有误了,其实根本原因是Multisim里面运放是三脚模型,根本没考虑电源。我们查看LM...

ML610Q473 程序烧录

ML610Q473 程序烧录

仿真器能够仿真程序的运行,但毕竟是“仿”,与实际情况可能有些出入,因此最终还是要将程序烧录到实际的目标板中。 对于ML610Q473,大体要有这么几步: (1) uEase与目标板连接 (2) 生成Hex文件 (3)转换Hex文件供烧录 1、uEase与目标板连接 (1)...

使用Doxygen生成Html文档

使用Doxygen生成Html文档

Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、C#。注释的语法与Qt-Doc、KDoc和JavaDoc兼容。Doxgen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LA...

按键精灵 获取控件内容(非窗体标题)

按键精灵 获取控件内容(非窗体标题)

想抓一个软件的 一个类名是Edit的输入框中的内容,句柄已经正确找到了,然后用精灵8自带的 Plugin.Window.GetText(Hwnd) 命令来获取,结果得不到输入框中的控件内容,只得到一个窗口标题 “ 1 ”。 如图示: 想获得这个输入框中的1222 这个...

I2C协议简单分析

I2C协议简单分析

一、什么是I2C协议 I2C协议是单片机与其它芯片常用的通讯协议,只需要两根线,号称最简单的串行通信协议,所以很好使用。 二、I2C协议的特点 1、只需要两条线路,一条串行数据线SDA,一条串行时钟线SCL; 2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址...

Quartus II Warning:can't generate programming files because you are currently using the Quartus II softwore in Evaluation Node

开发环境: Quartus II 11.0 问题: 代码编译通过,但是下载到CPLD,没有任何现象 且有warning 如下: can't generate programming files because you are currently using the Quartus II softwo...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。