为什么 AlertDialog 放到 while 里就不能显示了?
加格式太麻烦,想看高亮请看这个:
https://segmentfault.com/q/1010000010380701
我调试过了,确实执行到 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);
}
https://segmentfault.com/q/1010000010380701
我调试过了,确实执行到 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);
}
...全文
相关推荐
Android中显示AlertDialog对话框
android 显示 AlterDialog
Activity与AlertDialog值传递
自己总结的,在Android中 Activity与 AlertDialog 值传递的例子 有一个EditText和两个EditText,将值返回给Activity中的 TextView
Android 自定义AlertDialog对话框样式
实际的项目开发当中,经常需要根据实际的需求来自定义AlertDialog。最近在开发一个WIFI连接的功能,点击WIFI需要弹出自定义密码输入框,具体代码大家参考下本
AlertDialog8_0:测试 Android 8.0 AlertDialog 显示情况
AlertDialog8_0
Android 之AlertDialog.Builder的常用方式
常用的Builder对话框设置,包括只显示文本、带控件、自定义空、Builder间嵌套等


