だから...私はこの問題を解決する方法を見つけましたが、それは完璧な方法ではありません(詳細はこの回答の下部にあります)。
最初に Messenger を作成します。
private Messenger AlertDialogMessenger = new Messenger(new AlertDialogMessageHandler());
2 番目のハンドラで、次のダイアログが表示されます。
class AlertDialogMessageHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).create();
dialog.setTitle("Attention");
dialog.setMessage((CharSequence) msg.getData().get("MESSAGE"));
dialog.setOnCancelListener(new DialogInterface.OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
//Do something
}
});
dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
//Do something
dialog.dismiss();
}
});
dialog.show();
}
}
そして、メッセンジャーをサービスに送信する必要があります。
Intent intent = new Intent(this,MyService.class);
intent.putExtra(MainActivity.EXTRA_FROM_SERVICE_MESSENGER, this.AlertDialogMessenger);
this.bindService(intent, this.conn, Context.BIND_AUTO_CREATE);
サービスでは、メッセンジャーをキャッチする必要があります。
@Override
public IBinder onBind(Intent intent)
{
this.AlertDialoMessenger = intent.getParcelableExtra(MainActivity.EXTRA_FROM_SERVICE_MESSENGER);
return null;
}
次に、メッセージを送信してダイアログを表示できます。
Message msg = Message.obtain();
Bundle bundle = new Bundle();
bundle.putString("MESSAGE", "This is a test message");
msg.setData(bundle);
try
{
AlertDialoMessenger.send(msg);
}
catch (RemoteException e1)
{
e1.printStackTrace();
}
以上です。
残念ながら、私の場合はこれを使用できません。これは、Activity (この場合は MainActivity) が 1 つしかない場合にのみ機能するためです。ダイアログはこのアクティビティにのみ表示されるためです。
私のプロジェクトでは、より多くのアクティビティがあるため、これを使用しても意味がありません。
「Network error」のような短いトースト メッセージを表示し、OptionsMenu にヘルプ ページを提供することにしました。
ミロスに感謝!そして、このコードが時々誰かに役立つことを願っています:)