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

如何在android应用程序的任何活动中显示警报对话框?,android,android-alertdialog,Android,Android Alertdialog,在我的应用程序中,我希望显示所有活动的公共警报对话框。 在我的后台线程中,服务器数据定期出现 现在,如果一些用户定义的条件与该数据相匹配,我希望在屏幕上显示当前在前面的任何活动中的AlertDialog 如何确定在哪里显示警报对话框? 如果我的应用程序在后台,我想设置通知,而不是警报对话框,您需要在后台运行服务 所有需要的代码都在那里: 您的服务将向您的活动发送广播。 如果您的活动不在前台,则不会发生任何事情。您可以通过以下任一方式从后台显示警报对话框 但在显示对话框之前,您需要使用下面的一个

在我的应用程序中,我希望显示所有活动的公共
警报对话框。
在我的后台线程中,服务器数据定期出现

现在,如果一些用户定义的条件与该数据相匹配,我希望在屏幕上显示当前在前面的任何活动中的
AlertDialog

如何确定在哪里显示
警报对话框


如果我的应用程序在后台,我想设置
通知
,而不是
警报对话框

您需要在后台运行服务

所有需要的代码都在那里:

您的服务将向您的活动发送广播。
如果您的活动不在前台,则不会发生任何事情。

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

但在显示对话框之前,您需要使用下面的一个布尔标志检查活动是否正在运行,否则您将得到
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;
}
1。runOnUiThread

Thread thread= new Thread()
{
    public void run()
    {             
         mHandler.sendEmptyMessage(0);
    }
}
你需要在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();
               }    
            }
        });
2。处理程序

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

活动类

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();             
        }            
    }
};
线程

Thread thread= new Thread()
{
    public void run()
    {             
         mHandler.sendEmptyMessage(0);
    }
}

您需要帮助,以便在类中显示AlertDialog??您是否考虑过在应用程序中使用片段而不是多个活动?片段在其父活动的生命周期中有自己的生命周期。因此,如果有一个主活动和多个片段在该活动中工作,则始终可以在各个片段中使用主活动上下文来显示AlertDialogs应用程序上下文并不总是适合AlertDialogs。您可以获得一个
WindowManager$BadTokenException
异常:
无法添加窗口--标记null不适用于应用程序