我创建了一个后台服务,它会检查我的Firebase数据库中的值是否发生了变化,并在有任何更改时发送通知。只要应用程序在运行,该服务就会通知值的更改。当我关闭应用程序时,就不再收到通知。我的onStartCommand包含一个新线程,其中包括Firebase值事件监听器。随着值的更改,我调用sendNotification方法。以下是完整的服务类代码:
public class NotifyService extends Service
{
我称之为
Firebase mRef;
@Override
public IBinder onBind(Intent p1)
{
// TODO: Implement this method
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Toast.makeText(this,"service started",Toast.LENGTH_LONG).show();
Firebase.setAndroidContext(this);
mRef= new Firebase(myURL);
Runnable run = new Runnable(){
@Override
public void run(){
mRef.child("politics").child("story1").child("title").addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot p1)
{
// TODO: Implement this method
String data = (String)p1.getValue();
sendNotification(data);
}
@Override
public void onCancelled(FirebaseError p1)
{
// TODO: Implement this method
}
});
mRef.child("sports").child("story1").child("title").addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot p1)
{
// TODO: Implement this method
String data = (String)p1.getValue();
sendNotification(data);
}
@Override
public void onCancelled(FirebaseError p1)
{
// TODO: Implement this method
}
});
mRef.child("science").child("story1").child("title").addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot p1)
{
// TODO: Implement this method
String data = (String)p1.getValue();
sendNotification(data);
}
@Override
public void onCancelled(FirebaseError p1)
{
// TODO: Implement this method
}
});
mRef.child("gossip").child("story1").child("title").addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot p1)
{
// TODO: Implement this method
String data = (String)p1.getValue();
sendNotification(data);
}
@Override
public void onCancelled(FirebaseError p1)
{
// TODO: Implement this method
}
});
}};
Thread serviceThread = new Thread(run);
serviceThread.start();
return Service.START_STICKY;
}
@Override
public void onDestroy()
{
Toast.makeText(this, "activity destroyed", Toast.LENGTH_LONG).show();
}
public void sendNotification(String title){
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(NotifyService.this);
mBuilder.setSmallIcon(R.drawable.nicon);
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.nlicon));
mBuilder.setAutoCancel(true);
mBuilder.setContentTitle("New Story")
.setContentText(title);
Intent resultIntent = new Intent(this, MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(NotifyService.this);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify((int)System.currentTimeMillis(), mBuilder.build());
}
}
我称之为
使用以下方式调用
Intent i = new Intent(this, NotifyService.class);
startService(i);
为什么应用程序退出后通知不能出现?我怀疑是通知方法有问题。