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

时间:2012-09-12 10:39:38

标签: android alertdialog

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

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

如何识别显示AlertDialog的位置?
如果我的申请是在后台,我想设置Notifications而不是AlertDialog

2 个答案:

答案 0 :(得分:0)

您需要在后台运行服务。

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

http://www.websmithing.com/2011/02/01/how-to-update-the-ui-in-an-android-activity-using-data-from-a-background-service/

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

答案 1 :(得分:-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;
}

<强> 1。 runOnUiThread

你需要在下面的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 Class中创建一个处理程序,并可以调用sendMessage到该处理程序对象。编写代码以在Handler的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);
    }
}