[英]Firebase Cloud Messaging android project doesn't send push notifications
[英]Android service doesn't send notifications on app exit
我創建了一個后台服務 ,用於檢查Firebase數據庫中的值更改,並在有任何更改時發送Notification
。 只要應用程序正在運行,該服務就會通知值更改。 當我關閉應用程序時,我停止接收通知。 我的onStartCommand
包含一個包含onStartCommand
值事件監聽器的新線程。 隨着價值的變化
我叫sendNotification
方法。 這是我的完整服務類:
公共類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);
什么是不讓app退出后顯示通知。 我懷疑通知方法有問題。
我的服務顯然是在設置中運行,但它實際上是在應用程序被殺后被殺死的。
為了讓您的服務保持運行,而不是
startService(new Intent(this, MyService.class));
用這個:
Intent serviceintent =new Intent(this, MyService.class);
PendingIntent pendingintent =PendingIntent.getService(this,0, serviceintent,0);
AlarmManager alarm =(AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pendingintent);
alarm.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),5000, pendingintent);
這可確保您的服務每5秒鍾繼續使用AlarmManager
,因此無論發生什么情況,該服務都將繼續運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.