Я бегу следующий в моем LaunchActivity
onCreate()
Показать оповещение на UI
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
OneSignal.init(LaunchActivity.this, AppGlobal.GCMProjectNumber, AppGlobal.OneSignalAppID, new OneSignalNotificationOpened(LaunchActivity.this));
Log.d("OneSignal", "Initialized");
oneSignalInitialized = true;
}
});
Вот мой OneSignalNotificationOpened
класс:
class OneSignalNotificationOpened implements NotificationOpenedHandler {
Context context;
public OneSignalNotificationOpened(Context context) {
this.context = context;
}
public void notificationOpened(String message, JSONObject additionalData, boolean isActive) {
String messageTitle = "OneSignal Example", messageBody = message;
String tag = "launch";
try {
if (additionalData.has("title")){
messageTitle = additionalData.getString("title");
}
if (additionalData.has("actionSelected")){
messageBody += "\nPressed ButtonID: " + additionalData.getString("actionSelected");
}
messageBody = message;
if(additionalData.has("bookId")){
bookIndex = Integer.parseInt(additionalData.getString("bookId"));
if(bookIndex >= 0){
restrictBookListActivity = true;
if(AppPreferences.ShopBookList != null) {
Book theBook = AppPreferences.ShopBookList.get(bookIndex);
Log.i(tag, "stored: " + theBook.getName());
Bundle data = new Bundle();
data.putSerializable("param1", theBook);
//notificationReceived(messageTitle, messageBody, bookIndex);
final Intent detailActivity = new Intent(LaunchActivity.this, DetailActivity.class);
detailActivity.putExtras(data);
// startActivity(detailActivity);
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setTitle("Notification received!");
dialog.setMessage("This is body");
dialog.setCancelable(true);
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(detailActivity);
}
});
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
//startActivity(detailActivity);
}else Log.i(tag, "book list is null");
}
}
} catch (Exception e) {
e.printStackTrace();
Log.d("Error", "Error: " + e.toString());
}
}
}
открыть другую деятельность, используя Handler().postDelayed()
в onCreate()
, чтобы перейти к другой деятельности , Когда я получаю уведомление, я занимаюсь этим. dialog.show()
в OneSignalNotificationOpened
throws WindowManager$BadTokenException: Unable to add window
. Как я могу это решить?
Обновление: Я проверил, что моя деятельность завершилась, прежде чем показывать диалог isFinishing()
и обнаружил, что он завершен. Итак, как я могу показать предупреждение?
Попробуйте проверить, не активирована ли ваша деятельность isFinishing() перед отображением диалога, если вы не можете его показать. –
Хорошо. Все мои действия расширяют 'BaseActivity'. Я попытался вызвать метод из BaseActivity, чтобы показать это предупреждение. Но то же самое происходит и там. Моя BaseActivity никогда не заканчивается, я прав? Должно ли такое же происходить и для BaseActivity? –
@CoolBrain Нет, вы не правы - если вы расширяете что-то, это означает, что вы просто используете базовый объект в своем классе (подумайте об этом так). Это не имеет никакого отношения к жизненному циклу Android. – Divers