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

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

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

参考资料:

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://www.xjtudll.cn/Exp/385/

标签: Android
分享给朋友:

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

Win7 64bit安装usb blaster驱动

Win7 64bit安装usb blaster驱动

前面我就不讲了,直接到驱动搜索这一步。如下: 选择第二项“浏览计算机以查找驱动程序软件”; 关键步骤到了,很容易出错,导致无法安装成功 在下图中一定要将驱动程序位置设置为 “D:\altera\90\quartus\drivers\usb-blaster...

QuartusII编译工程后显示资源消耗为零的原因

参考资料:http://www.eefocus.com/li_mengxiang/blog/11-04/208828_3da3b.html 近日,编译了一个CPLD工程,编译OK,无任何错误,但是显示资源消耗为0,这个显然是不正常的。 网上搜了一番,一般是两种原因: 1、qurtusII编译工程后显...

模数转换器基本原理

模数转换器基本原理

模数转换一般分为采样、保持、量化和编码四步进行。 采样-保持 采样是将时间上连续变化的信号转换为时间上离散的信号,采样值取决于采样时间内输入模拟信号的大小。 根据采样定理,其采样频率fS必须大于等于输入模拟信号包含的最高频率fmax的两倍。采样频率的一般选取为: 要对模拟信号的采样值进行...

OKI-如何卸载U8Devtool

OKI-如何卸载U8Devtool

有时候,U8Dev出了点问题,需要重新安装来解决。 卸载与安装一样,都是使用安装程序SetupU8Dev。如图所示: 双击后,弹出一个窗口,有Modify,Repair和Remove三个选项,选择Remove即可(如果之前未安装该软件,是没有Remove选项的)。  ...

浅析电波表——英国MSF码

浅析电波表——英国MSF码

参考文献: http://en.wikipedia.org/wiki/Time_from_NPL http://www.npl.co.uk/science-technology/time-frequency/time/products-and-services/msf-radio-time-sig...

k3 API 如何修改token的有效期

解决方案: Token有效期的修改(FValue的单位为秒): UPDATE t_SystemProfile set FValue= '86400' --有效时间 where FCategory= 'API' AND FKey= 'tokenvalidity'...

发表评论

访客

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