Android - Как использовать startForegroundService () и startForeground () для API-28? - PullRequest
0 голосов
/ 13 марта 2019

В настоящее время я изучаю, как создать плавающий сервис чатов с плавающим передним планом.
Однако я заметил, что все библиотеки, которые я пытался использовать, не работают с API-28.
Я полагаю, что это связано с новыми ограничениями, упомянутыми здесь, в документации для Android .

По сути, это означает, что если я звоню в Службу, которая показывает вещи на переднем плане:
, я должен позвонить startForegroundService() вместо startService().

Кроме того, в нем говорится, что:
«После того, как система создала сервис, у приложения есть пять секунд, чтобы вызвать метод startForeground() сервиса, чтобы показать видимое пользователю уведомление новой службы.»

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

Может ли кто-нибудь привести пример того, как я должен их реализовать?
Пожалуйста и спасибо!

1 Ответ

1 голос
/ 13 марта 2019
@Override
public void onCreate() {
    mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    // Android O requires a Notification Channel.
    if (Build.VERSION.SDK_INT >= 26) {
        CharSequence name = getString(R.string.app_name);
        // Create the channel for the notification
        @SuppressLint("WrongConstant")
        NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name, NotificationManager.IMPORTANCE_LOW);
        // Set the Notification Channel for the Notification Manager.
        if (notificationManager != null) {
            notificationManager.createNotificationChannel(mChannel);
        }

        startForegroundService(new Intent(ForegroundService.this, ForegroundService.class));
        //We only need to call this for SDK 26+, since startForeground always has to be called after startForegroundService.
        startForeground(NOTIFICATION_ID, getNotification());
    }
    else {
        startService(new Intent(ForegroundService.this, ForegroundService.class));
    }

Кроме того, этот проект является хорошей отправной точкой для внедрения ForegroundService:

https://github.com/googlesamples/android-play-location/tree/master/LocationUpdatesForegroundService

...