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

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

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

参考资料:

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中弹出窗口解决方法” 的相关文章

Protel99SE交叉线节点处理

Protel99SE交叉线节点处理

在画电路图时,不可避免的会出现十字的交叉线,虽然Protel99SE默认不会在十字交叉处有节点(Junction),但是当你移动原理图的时候,Protel99SE会自动给加上个节点,这点就很不爽了,如图1和图2。    图1 移动前无节点 图2 移动后自动多了节点 但是...

加速度传感器选型考虑

模拟输出VS数字输出 这个是最先需要考虑的。这个取决于你系统中和加速度传感器之间的接口。一般模拟输出的电压和加速度是成比例的,比如2.5V对应0g的加速度,2.6V对应于0.5g的加速度。数字输出一般是I2C或SPI接口。 如果你使用的微控制器有模拟输入口,比如PIC/AVR,你可以非常简单的使...

再谈无线网络受限——无法获得IP地址

前面曾经写了一篇[无线网络连接受限]的解决办法(http://xjtudll.cn/Exp/66/),本次再谈一些这方面的内容。上次无线网络受限导致的结果就是:无线网卡无法获得IP地址,即便信号很好,也一直连不上。上次最后的解决办法是用WEP加密方式,后来在网上看到WPA2-PSK加密方式更为安全,...

Proteus运行找不到sdf文件解决方法

Proteus运行找不到sdf文件解决方法

很多人在用Proteus的时候,Proteus会提示找不到sdf文件,如图所示。提示Cannot open …… .sdf。这种情况经常出现在电子类软件,主要是软件仿真过程中使用的文件不能在有中文路径的文件夹里。用Mulitism的时候也会出现这个问题的。这个原因很简单,...

UltraEdit复制粘贴十六进制(二进制)

UltraEdit复制粘贴十六进制(二进制)

问题: 用UltraEdit打开文件,看其十六进制,需要将十六进制数据复制出来并粘贴到记事本。但是直接复制(或Ctrl+C),无法粘贴到记事本。 原因: 复制到剪贴板的是二进制码流,而不是文本,所以无法贴到只能处理文本的记事本里。 解决办法: 选中要复制的区域,右键--->【十六进制复制所选视...

ios5越狱及其注意事项

ios最新已经是ios5.0.1了,其实升级系统也没啥大好处,新系统一般要过一段时间才能越狱。当然,ios5.0.1越狱已经很成熟了。 ios5个人感觉有两个比较大的更新 1、iCloud功能,但是个人认为有泄露个人隐私的可能 2、通知栏有比较大的改变,现在搞的有点像And...

发表评论

访客

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