startForeground () не показывает никаких уведомлений - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу запустить фоновый сервис таким образом, чтобы он по-прежнему работал, даже если приложение закрыто,

Для этого я сделал сервис, запускающий процесс зависшим, и сделал его процессом.После того, как проблема не исчезла, я провел некоторое исследование и обнаружил, что на последних устройствах Android мы должны запускать такие службы на переднем плане: -при помощи startForegroundService для запуска службы, -and startForeground в onStartCommand службы, -показ уведомления с постоянным каналом,

Я сделал это, но та же проблема, уведомление для службы переднего плана не отображается,

OnStartCommand моей службы:

  @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent,flags,startId);

        Intent intent2 = new Intent(this, RDVSearchService.class);
        intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent2, 0);

        Notification.Builder builder = new Notification.Builder(getApplicationContext())
                .setContentTitle("Pratikk")
                .setContentText("Subject")
                .setSmallIcon(R.drawable.ok_done)
                .setContentIntent(pendingIntent);

        Notification notif;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            notif = builder.build();
        }else{
            notif = builder.getNotification();
        }

        startForeground(1234, notif);

        return START_STICKY;
    }

как я запускаю службу:

Intent intent = new Intent(context, RDVSearchService.class);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    context.startForegroundService(intent);
}else{
    context.startService(intent);
}

Моя декларация обслуживания в манифесте:

<service
android:name=".services.RDVSearchService"
android:exported="false"
android:process=":rdv_search" />

1 Ответ

0 голосов
/ 08 апреля 2019

С Android 8.0, должен создать канал.

    String channelId = "channelId";
    NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), channelId)
            .setContentTitle("Pratikk")
            .setContentText("Subject")
            .setSmallIcon(R.drawable.ok_done)
            .setContentIntent(pendingIntent);
    startForeground(1234, builder.build());
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(channelId,
                "name", NotificationManager.IMPORTANCE_LOW);
        channel.setDescription("description");
        channel.enableLights(false); // light
        channel.enableVibration(false); // vibration
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        if (manager != null) {
            manager.createNotificationChannel(channel);
        }
    }
...