При использовании следующего кода:
public class MainActivity extends AppCompatActivity {
private final static AtomicInteger notificationId = new AtomicInteger(0);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(R.drawable.notif )
.setColor(ContextCompat.getColor(this, R.color.colorPrimary))
.setContentTitle("Request Received")
.setContentText("new Notif")
.setAutoCancel(true)
.setDefaults(DEFAULT_LIGHTS);
mBuilder.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_NO_CREATE));
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(notificationId.incrementAndGet(), mBuilder.build());
}
}
Следующее поведение пользователя создает противоречивый подход к уведомлениям:
- Пользователь открывает приложение, появляется новое уведомление.
- Пользователь закрывает приложение.
- Пользователь нажимает на уведомление.
- Новое уведомление создано и приложение открыто.
- Пользователь щелкает уведомление (когда приложение открыто, если приложение закрыто, уведомление ведет себя как положено).
- Ничего не произошло. Видно следующее лог-сообщение: 02-28 14: 09: 15.966 840-2273 /? I / ActivityManager: START u0 {cmp = app.myapplication / .MainActivity} из uid 10093 из pid -1 на дисплее 0 02-28 14: 09: 15.966 840-2273 /? W / ActivityManager: startActivity вызывается из неактивного контекста; форсировать Intent.FLAG_ACTIVITY_NEW_TASK для: Intent {cmp = app.myapplication / .MainActivity}, что не имеет смысла, так как действие в настоящее время открыто.
Есть ли что-то в моем коде, что вызывает такое поведение? Ожидается ли такое поведение?
Кроме того, я хотел бы отметить, что следующий вариант использования дает ожидаемое поведение уведомления:
- Пользователь открывает приложение, появляется новое уведомление.
- Пользователь нажимает на уведомление.
- Создается новое уведомление и открывается MainActivity. -> перейти к шагу 2.
Это поведение очевидно на Android 5 и 6, но не было протестировано на Android 7.
2 ответа
Казалось, что проблема возникает из-за: «При использовании этого флага, если задача уже запущена для действия, которое вы сейчас запускаете, то новое действие не будет запущено; вместо этого текущая задача будет просто перенесена на передний план. экран с состоянием, в котором он был последним. " С уважением к "FLAG_ACTIVITY_NEW_TASK". Это привело к тому, что «текущая задача» была выведена на экран, когда она уже была активна.
переместить код ниже в метод onResume ()
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(R.drawable.notif )
.setColor(ContextCompat.getColor(this, R.color.colorPrimary))
.setContentTitle("Request Received")
.setContentText("new Notif")
.setAutoCancel(true)
.setDefaults(DEFAULT_LIGHTS);
mBuilder.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_NO_CREATE));
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(notificationId.incrementAndGet(), mBuilder.build());
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.