У меня есть приложение, которое слушает в фоне и когда пользовательские щелчки "отправляют", он отображает диалог. Однако я должен принести свое приложение к переднему плану, таким образом, пользователь отвечает на некоторые вопросы прежде, чем позволить сообщению пойти. но я не смог сделать это, это - код в моем SendListener:
SendListener sl = new SendListener(){
public boolean sendMessage(Message msg){
Dialog myDialog = new Dialog(Dialog.D_OK,
"message from within SendListener",
Dialog.OK,Bitmap.getPredefinedBitmap(Bitmap.EXCLAMATION),
Dialog.GLOBAL_STATUS)
{
//Override inHolster to prevent the Dialog from being dismissed
//when a user holsters their BlackBerry. This can
//cause a deadlock situation as the Messages
//application tries to save a draft of the message
//while the SendListener is waiting for the user to
//dismiss the Dialog.
public void inHolster()
{
}
};
//Obtain the application triggering the SendListener.
Application currentApp = Application.getApplication();
//Detect if the application is a UiApplication (has a GUI).
if( currentApp instanceof UiApplication )
{
//The sendMessage method is being triggered from
//within a UiApplication.
//Display the dialog using is show method.
myDialog.show();
App.requestForeground();
}
else
{
//The sendMessage method is being triggered from
// within an application (background application).
Ui.getUiEngine().pushGlobalScreen( myDialog, 1,
UiEngine.GLOBAL_MODAL );
}
return true;
}
};
store.addSendListener(sl);
Приложение является объектом, который я создал выше:
Application App = Application.getApplication();
Я также попытался вызвать App к переднему плану с помощью его processID, но до сих пор никакой удачи.
Кэшируйте экземпляр приложения внутри слушателя отправки при его создании и используйте его при запуске sendMessage.
Application.getApplication () получает только приложение вызывающего потока.
Вот, так лучше (теперь с форматированием кода).
public class MYSendListener implements SendListener {
private UiApplication _myApp;
public MySendListener(UiApplication myApp) {
_myApp = myApp;
}
public boolean sendMessage(Message m) {
...
_myApp.requestForeground();
}
}
Мне удалось добиться чего-то похожего на то, что вы описываете, но разница в том, что мои диалоги отображаются асинхронно, что на самом деле может быть проще ... так что в вашем случае ...
первое, что я мог бы вам предложить попробуйте получить блокировку событий перед нажатием на экран, ala:
synchronized(Application.getEventLock()){
final UiEngine ui = Ui.getUiEngine();
ui.pushGlobalScreen(theScreen, 1, UiEngine.GLOBAL_MODAL);
}
Я бы также просто создал собственный класс типа MainScreen и вставил его вместо простого диалога.