StartForeground () очищает уведомление после уничтожения приложения - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь заставить мой Service работать на переднем плане.Все нормально, но , когда я убил приложение, уведомление было очищено .
Еще одно замечание, оно не работает на XIAOMI REDMI NOTE 4 с android 7.0.

Пример кода:

    final Intent notificationIntent = new Intent();
    final PendingIntent pendingIntent = PendingIntent.getActivity(
            this,
            0,
            notificationIntent,
            0
    );

    final Intent intent = new Intent(this, ForegroundService.class);
    intent.setAction(STOP_SERVICE_ACTION);
    final PendingIntent stopIntent = PendingIntent.getService(
            this,
            0,
            intent,
            PendingIntent.FLAG_CANCEL_CURRENT
    );

    final NotificationCompat.Action action = new NotificationCompat.Action(0, getString(R.string.stop), stopIntent);

    final Notification notification = new NotificationCompat.Builder(this, NOTIFICATION_CHANEL_ID)
            .addAction(action)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(pendingIntent)
            .setContentText(getString(R.string.searching_in_surrounding))
            .build();

    startForeground(FOREGROUND_NOTIFICATION_ID, notification);  


 public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent != null && STOP_SERVICE_ACTION.equals(intent.getAction())) {
        stopSelf();
        return START_NOT_STICKY;
    }

    if (isRunning) {
        return START_STICKY;
    }
    return START_STICKY;
}

Что может быть не так?

1 Ответ

0 голосов
/ 21 сентября 2018

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

public void auto_start_permission() {
    String manufacturer = "xiaomi";
    if (manufacturer.equalsIgnoreCase(android.os.Build.MANUFACTURER)) {
        //this will open auto start screen where user can enable permission for your app
        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
        startActivity(intent);
    }
}

для получения дополнительной информации см.

...