Мое уведомление не будет отображаться, когда дата установки - это дата сегодня - PullRequest
0 голосов
/ 23 мая 2018

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

databaseReference = FirebaseDatabase.getInstance().getReference().child("Groups").child(mGroupUid).child("HomeFragment").child("FreezerItems");
    childEventListener = databaseReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            HashMap<String, String> value = (HashMap<String, String>) dataSnapshot.getValue();
            if (value != null) {
                String name = value.get("Name");
                String date = value.get("Date");

                SimpleDateFormat sdf = new SimpleDateFormat("M/dd/yyyy", Locale.US);

                    try {
                        dateFormat = sdf.parse(date);

                    } catch (ParseException e) {
                        Log.wtf("FailedtoChangeDate", "Fail");
                    }

                    Calendar cal = Calendar.getInstance();
                    cal.add(Calendar.DAY_OF_MONTH, 1);
                    Date tomorrow = cal.getTime();

                    if (dateFormat.equals(tomorrow)) {

                        GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(getApplicationContext());
                        if (account != null) {
                            String firstname = account.getGivenName();
                            mContentTitle = "Your " + name + " is about to be expired!";
                            mContentText = firstname + ", make sure to cook or eat your " + name + " by " + date;
                        }

                        Intent openApp = new Intent(getApplicationContext(), MainActivity.class);
                        PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 100, openApp, PendingIntent.FLAG_UPDATE_CURRENT);

                        notification = new NotificationCompat.Builder(getApplicationContext(), "Default")
                                .setSmallIcon(R.drawable.ic_restaurant_black_24dp)
                                .setContentTitle(mContentTitle)
                                .setContentText(mContentText)
                                .setLights(Color.GREEN, 2000, 1000)
                                .setPriority(NotificationCompat.PRIORITY_MAX)
                                .setStyle(new NotificationCompat.BigTextStyle().bigText(mContentText))
                                .setContentIntent(contentIntent)
                                .setAutoCancel(true);
                        createNotificationChannel(getApplicationContext());

                        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext());
                        notificationManager.notify(uniqueID, notification.build());

                    }


            }

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Я уверен, что мое уведомление работает, потому что, когда я удаляю if (dateFormat.equals(tomorrow)), оно отправляет уведомление и работает отлично.Это также класс обслуживания, а не обычная деятельность, так что, возможно, это как-то связано с этим.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

И dateFormat, и today являются объектами Date (), и они никогда не будут равны друг другу.Поэтому условие не выполнено и уведомление не отправлено.Instaed вы можете попробовать это,

if(dateFormat.getTime() == tomorrow.getTime()) {
// Send notification 
}
0 голосов
/ 23 мая 2018

Каждый сервис имеет свой собственный контекст, просто используйте его.Изменить getApplicationContext() на YourServiceClass.this.

 GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(YourServiceClass.this);
                        if (account != null) {
                            String firstname = account.getGivenName();
                            mContentTitle = "Your " + name + " is about to be expired!";
                            mContentText = firstname + ", make sure to cook or eat your " + name + " by " + date;
                        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...