【问题标题】:startForeground() doesn't show any notificationstartForeground() 不显示任何通知
【发布时间】:2019-08-28 17:36:38
【问题描述】:

我想启动一个后台服务,即使应用程序关闭,它仍然可以运行,

为此,我使服务启动变得有粘性,并使其成为一个过程。 问题仍然存在,所以我做了一些研究,发现在最近的 Android 设备中,我们必须在前台启动此类服务: - 通过使用 startForegroundService 启动服务, - 和 Service 的 onStartCommand 中的 startForeground, - 显示具有恒定频道的通知。

我这样做了,但同样的问题,前台服务的通知没有显示,

我的服务的 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);
}

我在 Manifest 中的服务声明:

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

【问题讨论】:

    标签: android android-intent android-service android-notifications foreground-service


    【解决方案1】:

    从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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-02
      • 2020-08-27
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多