手机锁定时,应用内通知不会显示

时间:2019-07-01 19:55:20

标签: android android-notifications

我创建了一个应用内通知,该通知会通过后台服务触发,该后台服务由firebase值事件侦听器触发。

即使应用程序处于后台,通知也会显示手机何时被解锁,但当手机锁定时则不会显示。

    public int onStartCommand(Intent intent, int flags, int startId) {
    flag = true;
    queueList = new ArrayList<>();
    firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

    if (firebaseUser != null) {
        reference = FirebaseDatabase.getInstance().getReference("queue").child(firebaseUser.getUid());
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                queueList.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    try {
                        ChatQueue chatQueue = snapshot.getValue(ChatQueue.class);
                        if (chatQueue.getStatus().equals("pending")) {
                            queueList.add(chatQueue);
                        }
                    } catch (NullPointerException e) {
                        System.out.println(e);
                    } catch (Exception e) {
                        System.out.println(e);
                    }
                }

                if (count > 0) {
                    if (queueList.size() > 0) {
                        notifyDoctor();
                        ShortcutBadger.applyCount(getApplicationContext(), queueList.size());
                    } else {
                        ShortcutBadger.removeCount(getApplicationContext());
                    }
                }
                count++;
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
    return START_NOT_STICKY;
}

private void sendNotification() {
    int j = 220;
    Intent intent = new Intent(this, ChatHomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, j, intent, PendingIntent.FLAG_ONE_SHOT);

    final Uri defaultSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    final NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.notif_icon)
            .setContentTitle("Patient Alert!")
            .setContentText("You have a new patient.")
            .setAutoCancel(true)
            .setSound(defaultSound).setContentIntent(pendingIntent);
    final NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    builder.setPriority(Notification.PRIORITY_MAX);
    notificationManager.notify(j, builder.build());
}

2 个答案:

答案 0 :(得分:1)

除非共享代码,否则不清楚要显示哪种通知。

如果是heads-up通知,则这是预期的行为:

  

仅在设备解锁时显示。

如果您要测试的设备在低于5.0的Android版本上运行,则不会显示通知:

  

从Android 5.0开始,通知可以显示在锁定屏幕上。

即使您可以将通知设置为显示在lock screen上:

  

您可以通过编程方式设置应用在安全锁定屏幕上发布的通知中显示的详细程度,甚至可以设置通知是否完全显示在锁定屏幕上。

您必须检查手机上的设置,因为:

  

用户可以使用系统设置来选择在锁定屏幕通知中可见的详细程度,包括用于禁用所有锁定屏幕通知的选项。从Android 8.0开始,用户可以选择禁用或启用每个通知通道的锁定屏幕通知。

答案 1 :(得分:0)

我能够解决该问题,似乎android操作系统会在后台终止服务以节省电池。 因为我是从应用程序而不是服务器中发送通知,所以这应该发生,因此前台服务非常适合,因为它不会被系统杀死,因此我的问题得以解决。

谢谢大家。