gpt4 book ai didi

Android 服务不会在应用程序退出时发送通知

转载 作者:太空狗 更新时间:2023-10-29 14:01:43 25 4
gpt4 key购买 nike

我创建了一个后台服务,用于检查我的 Firebase 数据库 中的值变化,并在有任何变化时发送一个通知。只要应用程序正在运行,该服务就会通知值更改。当我关闭应用程序时,我将停止接收通知。我的 onStartCommand 包含一个由 firebase 值事件监听器组成的新线程。随着值的变化

我调用了 sendNotification 方法。这是我的完整服务类:

公共(public)类 NotifyService 扩展服务{

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);

是什么让应用程序退出后不显示通知。我怀疑通知方式有问题。

最佳答案

我的服务显然是在设置中运行,但实际上它是在应用程序被终止后被终止的。

让您的服务保持运行,而不是

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,因此无论发生什么情况,服务都会继续运行。

关于Android 服务不会在应用程序退出时发送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35122473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com