如何在Android应用程序的任何活动中显示警报对话框?

Mih*_*hah 6 android android-alertdialog

在我的应用程序中,我想显示AlertDialog所有活动的通用.
在我的后台线程中,服务器数据会定期出现.

现在,如果某些用户定义的条件与该数据匹配,我想在屏幕AlertDialog上显示当前正在进行的任何活动.

如何识别显示位置AlertDialog
如果我的应用程序是在后台,我想设置Notifications而不是AlertDialog.

Pri*_*tel -1

您可以通过以下任一方式从后台显示警报对话框...

但在显示对话框之前,您需要使用一个布尔标志来检查活动是否正在运行,如下所示,否则您将得到WindowManager$BadTokenException.

// Flag to check if activity is running or not
boolean isActivityRunning = false;

@Override
protected void onResume() {
    super.onResume();
    isActivityRunning = true;
}

@Override
protected void onPause() {
    super.onPause();
    isActivityRunning = false;
}
Run Code Online (Sandbox Code Playgroud)

1.在UiThread上运行

您需要在 UI 线程上显示对话框,如下所示...

runOnUiThread(new Runnable() {
            @Override
            public void run() {
               if(isActivityRunning) {
                 // Your dialog code.
                 AlertDialog ActiveCallDialog = new AlertDialog.Builder(context)
                    .setMessage(R.string.message)                       
                    .setTitle(R.string.title)
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .show();
               }    
            }
        });
Run Code Online (Sandbox Code Playgroud)

2. 处理程序

您可以在 Activity 类中创建处理程序,并可以调用 sendMessage 到该处理程序对象。在Handler的handleMessage方法中编写显示alert的代码,例如:

活动课

Handler mHandler = new Handler()
{
    public void handleMessage(Message msg)
    {
       if(isActivityRunning) {
          //Display Alert
          AlertDialog ActiveCallDialog = new AlertDialog.Builder(context)
                    .setMessage(R.string.message)                       
                    .setTitle(R.string.title)
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .show();             
        }            
    }
};
Run Code Online (Sandbox Code Playgroud)

线

Thread thread= new Thread()
{
    public void run()
    {             
         mHandler.sendEmptyMessage(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 应用程序上下文并不总是适合 AlertDialogs。您可能会收到“WindowManager$BadTokenException”异常:“无法添加窗口——令牌 null 不适用于应用程序”。 (5认同)