6

私のアプリケーションではAlertDialog、すべてのアクティビティに共通して表示したいと考えています。
私のバックグラウンド スレッドでは、サーバー データが定期的に送信されます。

AlertDialogユーザー定義の条件がそのデータと一致する場合、現在前面にあるアクティビティで画面に 表示したいと考えています。

表示する場所を特定するにはどうすればよいAlertDialogですか? また、アプリケーションがバックグラウンドにある場合は、ではなく
設定したいと思います。NotificationsAlertDialog

4

2 に答える 2

0

バックグラウンドで実行されているサービスが必要になります。

必要なコードはすべてそこにあります。

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

サービスがアクティビティにブロードキャストを送信します。アクティビティがフォアグラウンドにない場合、何も起こりません。

于 2012-09-12T10:44:51.153 に答える
-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 クラスでハンドラーを作成し、そのハンドラー オブジェクトに対して 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);
    }
}
于 2012-09-12T10:51:49.763 に答える