以下のいずれかの方法で、バックグラウンドから警告ダイアログを表示できます...
ただし、ダイアログを表示する前に、以下のように 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);
}
}