申祷无 2017-07-27 09:38 采纳率: 50%
浏览 756
已采纳

为什么 AlertDialog 放到 while 里就不能显示了?

我调试过了,确实执行到 showAlertDialog(context); 了,我在 logcat 里看到了。代码是这样的:

if (pm.isScreenOn()) {
                    Log.v("remind", "show alert");
                    showAlertDialog(context);
                }

在下面那个不能显示的情况下有时候好像会一下子显示出来很多。因为一个对话框只有很少的阴影,因为前面说的那种情况阴影很多,所以可能有很多。然后在这种情况下点击屏幕就没反应了,奇怪的是点击菜单、主页、返回有反应。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" >
</uses-permission>
BroadcastReceiver mScreenStateReceiver = new ScreenStateReceiver();
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_USER_PRESENT);
registerReceiver(mScreenStateReceiver, screenStateFilter);

下面的不会显示:

public class ScreenStateReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

                while(true) {
                        try {
                                Thread.sleep(3 * 1000);
                        } catch (Exception e) {
                                System.out.println("Error: " + e);
                        }
                        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);

                        if(pm.isScreenOn()) {
                                showAlertDialog(context);
                        }
                        else
                                return;
                }
        }

        public void showAlertDialog(Context context) {
                AlertDialog.Builder builder;
                builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Dialog_Alert);
                builder.setTitle("提醒")
                                .setMessage("你正在看的东西有用吗?")
                                .setPositiveButton("有用", new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                                // continue with delete
                                        }
                                })
                                .setNegativeButton("没用", new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                                // do nothing
                                        }
                                })
                                .setIcon(android.R.drawable.ic_dialog_alert);
                AlertDialog alert = builder.create();
                alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
                alert.show();
        }
}

下面这样就能显示了:

 public void onReceive(Context context, Intent intent) {
                try {
                    Thread.sleep(3 * 1000);
                } catch (Exception e) {
                    System.out.println("Error: " + e);
                }
                showAlertDialog(context);
}
  • 写回答

2条回答 默认 最新

  • smile_邝野 2017-07-28 06:28
    关注

    上面的是pm.isScreenOn()为FALSE时,不会执行showAlertDialog(context);
    下面不管什么情况都会执行so 你懂了吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 12月20日

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)