Android: Show AlertDialog from Service

方便搜索就使用英文标题吧,有这个需求,结果网上一搜,大牛们纷纷告诫”Do NOT do that!”,看到没 还是大写NOT,再然后就是一串的编程理念讲一堆.

总体来讲,他们主要说的是要先有一个Activity,Activity才是管理和实现UI的,Service不是.但是总有那么一个情况没有Actvity或者Activtiy并没有启动时,Service检测到某种异常需要立刻告知用户,这种需求就摆在面前了.

在看到Android ─ Service建立Dialog對話框发现问题还是有解的.
Step 1: 添加权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Step 2: Service中调用该方法

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的情况下显示出对话框了.

更新代码:

    /**
     * @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);.如图所示:这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值