Android: Show AlertDialog from Service
2015-03-05 09:50
330 查看
方便搜索就使用英文标题吧,有这个需求,结果网上一搜,大牛们纷纷告诫”Do NOT do that!”,看到没 还是大写NOT,再然后就是一串的编程理念讲一堆.
总体来讲,他们主要说的是要先有一个Activity,Activity才是管理和实现UI的,Service不是.但是总有那么一个情况没有Actvity或者Activtiy并没有启动时,Service检测到某种异常需要立刻告知用户,这种需求就摆在面前了.
在看到Android ─ Service建立Dialog對話框发现问题还是有解的.
Step 1: 添加权限
Step 2: Service中调用该方法
就可以在不添加Activity的情况下显示出对话框了.
更新代码:
调用例子
总体来讲,他们主要说的是要先有一个Activity,Activity才是管理和实现UI的,Service不是.但是总有那么一个情况没有Actvity或者Activtiy并没有启动时,Service检测到某种异常需要立刻告知用户,这种需求就摆在面前了.
在看到Android ─ Service建立Dialog對話框发现问题还是有解的.
Step 1: 添加权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Step 2: Service中调用该方法
[code]public void showDialog(int title,String message){ Log.i("service","show dialog function"); TextView errmsg = (TextView) layout.findViewById(R.id.errmsg); Log.i("service", "dialog error msg:"+message); errmsg.setText(Html.fromHtml(message)); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(title); builder.setMessage(message); builder.setPositiveButton(R.string.dlg_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }); AlertDialog alert = builder.create(); alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//設定提示框為系統提示框 alert.show(); }
就可以在不添加Activity的情况下显示出对话框了.
更新代码:
[code] /** * @param context Activity/Service all okay. * @param title Title res id. * @param message Message res id. */ void showDialog(Context context, int title, int message) { // 通过AlertDialog.Builder这个类来实例化我们的一个AlertDialog的对象 AlertDialog.Builder builder = new AlertDialog.Builder(context); // 设置Title的图标 builder.setIcon(android.R.drawable.stat_sys_warning); // 设置Title的内容 builder.setTitle(title); // 设置Content来显示一个信息 builder.setMessage(message); // 设置一个PositiveButton builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }); AlertDialog alert = builder.create(); // 設定提示框為系統提示框 alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); alert.show(); }
调用例子
showDialog(this, android.R.string.dialog_alert_title, android.R.string.unknownName);.如图所示:
![](http://img.my.csdn.net/uploads/201503/05/1425520677_4720.png)
相关文章推荐
- Android 如何在service和BroadCastReceiver中 启动activity和alertdialog?
- Android service里面启动activity和alertdialog .
- Android service里面启动activity和alertdialog .
- The method showDialog(int) from the type Activity is deprecated-android旧版dialog不能用的问题
- Android service里面启动activity和alertdialog .
- android 简单列表对话框(AlertDialog.Builder().setItems())
- 一个封装了在Ajax下弹出Alert、showModelessDialog、showModalDialog窗口的类(转)
- Android之AlertDialog的使用
- android -如何让不让AlertDialog dismissed by google search
- How to use AlertDialog.Builder in Android applications
- android 自定义弹出框AlertDialog
- Android入门第九篇之AlertDialog
- Android入门第九篇之AlertDialog
- 关于AlertDialog中不可思议的dialog.show()异常出错的问题的解决
- android alertdialog的按钮点击后不消失
- Android笔记:Android UI学习 - 对话框 (AlertDialog & ProgressDialog)
- Android AlertDialog解决点击按钮立即消失的问题
- 在Android程序里显示等待滚动圈(使用ProgressDialog)| Show waiting rolling circle in android application (using ProgressDialog)
- android show dialog exception or android.view.windowManager BadTokenException
- Android系列之LinearLayout+EditText+Button+AlertDialog