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

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

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

参考资料:

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

Xcode 不显示打印(NSLog)的内容

Xcode 不显示打印(NSLog)的内容

用Xcode的时候,突然发现不显示打印的消息了,感觉非常奇怪,之前一直正常可用。 最终发现原因: 自己无意中关了打印窗口了,那自然就没法显示打印信息了 如图所示,点右下角那个小按钮即可。 或者使用快捷键:command + shift + c 问题解决,打印窗口出现。...

简易方波信号发生器

简易方波信号发生器

简易正弦波信号发生器这个是帮别人做的。方波信号发生器要求:(1)搭建硬件电路(2)设计软件,满足    ① 外部触发,可任意选择1KHz、100Hz、1Hz三种方波之一输出(示波器观察)    ② 延时方法包括软件延时和定时器两种方式&nb...

OKI编译器 Fatal ERR F025 解决

OKI编译器 Fatal ERR F025 解决

工程添加好C文件和H文件后,编译,提示如下错误: Fatal error F025:NO ROM window specification 原因: 编译器缺乏.ASM 启动文件,需要手动添加,文件在安装目录里: \Startup\Src\ 根据需求拷贝相应的ASM文件。例如,ML610Q475则拷...

插件中获取多级审核级次

oMultiMgr.CurrentLevel   Private Sub m_BillInterface_AfterLoadBill()     Dim oMultiMgr As Object     Set oMultiMgr...

IAR显示行号

IAR显示行号

个人比较习惯用外部编辑器来编辑程序,但是调试工具还是得用IAR,有时候要找到某一行程序,就必须知道行号。 Tools-> Option -> Editor -> Show line numbers(勾选)...

VS C#错误 未能找到类型或命名空间名称"xxxxxx"的真正原因

问题描述: 明明已经引用了项目(或DLL),但一编译就提示:未能找到类型或者命名空间。 根本原因还是引用的问题,引用错了,然后VS在这上面提示又不够智能 第一种可能: 这种可能性很好排查,A项目所使用的.net版本为3.5,B项目为4.0,那么A引用B是肯定要出事的 而错误提示就是那坑爹的未能找到类...

发表评论

访客

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