我已经搜索了大约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"));
}
NotificationPublisher的:
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);
}
}}
更新:用于设置闹钟的代码... 的 AlarmManager:
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)并且出乎意料的是,应用程序关闭后仍然会设置警报。那么,它可能是我的手机(联想K5 A6020l36,与Android 5.1.1)?但在这种情况下,whatsapp和gmail如何在关闭应用程序的情况下在这款手机上运行警报?
答案 0 :(得分:0)
我在您的问题中注意到,即使应用关闭,您也希望从服务器向用户发送通知,例如whats-app,Facebook等。 您是否了解了 Firebase云消息传递(FCM)或 Google云消息传递(GCM),我认为这更适合您的问题。点击Here了解详情。
答案 1 :(得分:0)
将AlarmManager
设置为在预定日期\时间开火。
当它激活时,您的代码将会运行,所以只需重复步骤1即可设置下次您需要触发的功能,然后执行您需要的任何功能以检查您的站点(启动一项服务此)
从第2步开始重复
请不要忘记,重启设备后警报无法生效,因此如果设备重新启动,您需要重新设置警报。
答案 2 :(得分:0)
好吧,如果用户杀死你的应用程序,那么它取决于manofacturer。有些人只杀死进程,有些人会杀死进程以及与进程相关的服务,广播,报警管理器等。
也许GCM可以在这个杀戮过程中幸存下来,就像你说whatsapp确实收到了通知......