【发布时间】:2017-02-24 13:33:24
【问题描述】:
好吧,我已经搜索了大约 5 个小时,但似乎没有任何答案可以解决问题。我的应用程序将持续跟踪来自网站的邮政对象,并且需要每隔 X(用户定义它)时间进行一次刷新以检查网站上的更新,以便用户知道它如果他愿意,甚至可以关闭此功能(如果需要,我将手动取消警报管理器)。
我需要做的是 whatsapp、facebook 或 gmail 之类的东西,即使在应用程序关闭的情况下也会检查消息,并向用户发送一些通知。但这似乎是不可能的......我检查了“adb shell dumpsys alarm”并且警报在那里,但只有在应用程序运行时。我知道这正是预期会发生的事情,但是这些其他应用程序如何总是在应用程序关闭时再次设置它们的 AlarmMannagers?
我当前的代码:
清单:
<service android:name="services.HelloService"
android:process=":remote"/>
<receiver android:name="entidade.NotificationPublisher">
<intent-filter>
<action android:name="IWillStartAuto" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
HelloService:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("Hello Service Starting...");
ArrayList<Objeto> list = new ObjetoDAO(this).getAllObjetos(); //Sets the alarms...
for(int i=0; i<list.size(); i++){
if(!list.get(i).isArquivado())
list.get(i).setAlarme(this);
}
return START_STICKY;
}
@Override
public void onDestroy() {
System.out.println("Hello Service Ending...");
sendBroadcast(new Intent("IWillStartAuto"));
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
sendBroadcast(new Intent("IWillStartAuto"));
}
通知发布者:
public class NotificationPublisher extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
ArrayList<Objeto> lista = new ObjetoDAO(context).getAllObjetos(); //list of tracked objects
for(int i=0; i<lista.size(); i++){
if(!lista.get(i).isArquivado()) //sets the AlarmMannager if users want it...
lista.get(i).testeNotificacao(context);
}
}}
更新: 用于设置闹钟的代码... 报警管理器:
public void setAlarme(Context context) {
if (!isArquivado()) {
int idDoAlarme = getId();
Calendar calendar = Calendar.getInstance();
long interval = AlarmManager.INTERVAL_FIFTEEN_MINUTES;
Intent notificationIntent = new Intent(context, NotificationPublisher.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, idDoAlarme, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);
}
}
还注意到一些事情:在我的旧手机(LG E435f,Android 4.1.2)上测试了该应用程序,令人惊讶的是,在应用程序关闭后仍然设置了闹钟。那么,这可能与我的手机有关(Lenovo K5 A6020l36,Android 5.1.1)吗?但是在这种情况下,whatsapp 和 gmail 是如何在应用关闭的情况下仍然在这款手机上运行警报的?
【问题讨论】:
标签: android service broadcastreceiver alarmmanager taskmanager