В Android Oreo 8.0 приложение выходит на первый план из фона, когда приходят уведомления - PullRequest
0 голосов
/ 22 мая 2018

Мое приложение выходит на передний план, когда приложение находится в фоновом состоянии, когда приходят уведомления, но это поведение не происходит в отключенном состоянии.Это не происходит ниже oreo.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, getString(R.string.app_name), NotificationManager.IMPORTANCE_HIGH);
    notificationManager.createNotificationChannel(mChannel);
}

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this,CHANNEL_ID)
        .setSmallIcon(R.drawable.tracking_app_logo)
        .setContentTitle(getString(R.string.app_name))
        .setContentText("Uploading database...")
        .setContentIntent(pendingIntent)
        .setAutoCancel(false)
        .setChannelId(CHANNEL_ID)
        .setOngoing(true)
        .setPriority(NotificationCompat.PRIORITY_HIGH);


startForeground(102, mBuilder.build());

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Извините за это, если вы найдете этот ответ неуместным, я опубликовал это, потому что я думал, что вы используете push-уведомление, но теперь я думаю, что вы генерируете уведомление с помощью в приложении, дайте мне знать, если я снова иду в неправильном направлении.

Вы можете генерировать уведомления в приложении следующими способами.

  1. Alarm Manager: в этом окне вы можете указать время, когда вам нужно уведомление, чтобы при выполнении требованиявы можете передать Broadcast в приложение, чтобы событие было вызвано

    например: https://developer.android.com/reference/android/app/AlarmManager

  2. Сервис: в этом вы можете запустить липкий сервис, который будет работать в фоновом режиме икогда условие будет выполнено, тогда ваша трансляция будет запущена, и вы можете показать свое уведомление

    например: https://developer.android.com/reference/android/app/Service

  3. Планировщик заданий: с помощью этого вы также можете показать уведомление, которое выхотите показать

    например: http://www.vogella.com/tutorials/AndroidTaskScheduling/article.html

и, если вы все еще сталкиваетесь с этой проблемой, перейдите по этой ссылке:

https://medium.com/exploring-android/exploring-background-execution-limits-on-android-oreo-ab384762a66c

0 голосов
/ 22 мая 2018

Происходит следующее: вы создаете уведомление в своем собственном контексте активности и никогда не запускаете его из фоновой службы, поэтому, если вы не убьете приложение, вы сможете увидеть уведомление, так как контекст еще живи уведомление может быть создано.

Вы должны использовать AlarmManager, чтобы запланировать свои уведомления, так как вы используете его в своем собственном контексте деятельности, я бы порекомендовал вам прочитать о AlarmManager службе и как получитьэто делается с помощью уведомлений.

Хорошую статью о том, как этого добиться, можно найти здесь http://droidmentor.com/schedule-notifications-using-alarmmanager/

Как это работает - это просто:

Сначала вы настраиваете фоновую службунапример, AlarmManager для запуска уведомлений вашего приложения в фоновом режиме

AlarmManager установит время для уведомления, и даже если приложение будет убито, оно запустит ваше уведомление, поскольку AlarmManager являетсяслужба, работающая в фоновом режиме системы.

Еще один совет - использовать службу облачных сообщений Firebase в сочетании с Notifi.cationCompat;вам просто нужно реализовать службу в своем манифесте, как это, чтобы запускать уведомления в фоновом режиме

<service
    android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

Проверка документации по обмену сообщениями Firebase: https://firebase.google.com/docs/cloud-messaging/android/client

...