Это то, чего я достиг!В моем приложении у меня есть кнопка включения уведомлений и кнопка отключения уведомлений.Включите кнопку запуска службы и установите прослушиватель базы данных.Выключите кнопку, чтобы остановить службу и удалить прослушиватель базы данных.
public class NotificationService extends Service {
String CHANNEL_ID = "hostelmate_notification";
DatabaseReference databaseIssue;
ChildEventListener childEventListener;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flag, int startId) {
Toast.makeText(this,"Notifications activated",Toast.LENGTH_LONG).show();
databaseIssue = FirebaseDatabase.getInstance().getReference("issues");
childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
displayNotification();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
databaseIssue.addChildEventListener(childEventListener);
return START_STICKY;
}
@Override
public void onDestroy() {
databaseIssue.removeEventListener(childEventListener);
Toast.makeText(this,"Notifications deactivated",Toast.LENGTH_LONG).show();
super.onDestroy();
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
public void displayNotification(){
createNotificationChannel();
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
builder.setSmallIcon(R.drawable.ic_notifications_active_white_24dp);
builder.setContentTitle("Hostel Mate");
builder.setContentText("New issue reported!");
builder.setPriority(NotificationCompat.PRIORITY_HIGH);
NotificationManagerCompat notificationManagerCompat =NotificationManagerCompat.from(this);
int notificationId = (int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE);
notificationManagerCompat.notify(notificationId, builder.build());
}
private void createNotificationChannel(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
CharSequence name = "Hostelmate notification";
String description = "Hi";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, name, importance);
notificationChannel.setDescription(description);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(notificationChannel);
}
}
}
В чем проблема с моим подходом?
Я хочу показывать уведомление только при новомребенок добавлен в базу данных. Но в настоящее время уведомление отображается при запуске самой службы.
Как этого избежать?