Служба, генерирующая уведомление о новом дочернем элементе, добавлена ​​в базу данных пожарной базы - PullRequest
0 голосов
/ 30 декабря 2018

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

Поэтому вместо использования облачных функций, потому что это так сложно, Я думал, что буду использовать сервис, который будет работать в фоновом режиме и запускать уведомление onChildadded () в базе данных Firebase.

Как я могу написать класс сервиса, который будет получать ссылку из базы данных и будет инициировать уведомление?

Я использую это

Строка NOTIFICATION_CHANNEL_ID = "my_channel_id_01";

private FirebaseDatabase database;
private DatabaseReference mFirebaseReference;
private ChildEventListener mChildEventListener;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
private FirebaseStorage mFirebaseStorage;
private StorageReference mChatPhotosReference;
private NotificationManager mNotificationManager ;
public  NotificationCompat.Builder mBuilder ;
int some = 0;

public PushNotification() {

    database = FirebaseDatabase.getInstance();
    mAuth = FirebaseAuth.getInstance();
    mFirebaseStorage = FirebaseStorage.getInstance();
    mFirebaseReference = database.getReference().child("list");

    attachDatabaseReadListener();

}

protected void attachDatabaseReadListener() {

    if (mChildEventListener == null) {
        mChildEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                Intent intent = new Intent(getBaseContext(), MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), 0, intent,
                        PendingIntent.FLAG_ONE_SHOT);

                NotificationManager notificationManager =
                        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);


                NotificationCompat.Builder mnotificationBuilder = new NotificationCompat.Builder(getBaseContext())
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle("new Notification")
                        .setContentText("notification example")
                        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                        .setContentIntent(pendingIntent)
                        .setAutoCancel(true)
                        .setOnlyAlertOnce(true)
                        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

                notificationManager.notify(0, mnotificationBuilder.build());
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                mNotificationManager.notify(some, mBuilder.build());
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
                mNotificationManager.notify(some, mBuilder.build());
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
                mNotificationManager.notify(some, mBuilder.build());
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        };

        mFirebaseReference.addChildEventListener(mChildEventListener);
    }

}


@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}

}

...