Итак... Я нашел способ решить эту проблему, но это не идеальный способ (дополнительная информация находится внизу этого ответа).
Сначала создайте мессенджер:
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). Потому что диалог будет отображаться только в этом действии.
В моем проекте у меня больше Activity и поэтому нет смысла использовать это.
Я решил показать короткое всплывающее сообщение, например «Ошибка сети», и предоставить страницу справки в меню «Параметры».
Спасибо Милошу! и я надеюсь, что этот код иногда помогает кому-то :)
person
Chris
schedule
29.01.2013