Android的Service中弹出窗口解决方法
参考资料:
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);