所以......我找到了解决这个问题的方法,但这不是完美的方法(更多细节在这个答案的底部)。
首先创建一个 Messenger:
private Messenger AlertDialogMessenger = new Messenger(new AlertDialogMessageHandler());
第二个处理程序,显示此对话框:
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();
}
就是这样。
不幸的是,我不能在我的情况下使用它,因为这仅在您只有一个活动(在本例中为 MainActivity)时才有效。因为 Dialog 只会出现在这个 Activity 中。
在我的项目中,我有更多的活动,所以使用它没有任何意义。
我决定显示一条简短的 toast 消息,例如“网络错误”,并在 OptionsMenu 中提供帮助页面。
感谢米洛斯!我希望这段代码有时对某人有所帮助:)