从webserivce我以日期和时间的形式获取数据,意味着某些特定日期我有一些插槽。下图给出了详细说明。
在每个日期,我都有一些时间安排。这里我想要的是在特定的日期和时间显示通知。如果数据库的响应包含明天日期,如2012年12月7日上午11:00。我需要在那时显示通知。
我对通知管理器和我正在使用的代码有一些想法..
Main.java
NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.ic_action_search, "A New Message!", System.currentTimeMillis());
Intent notificationIntent = new Intent(this, Main.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(Main.this, notificationTitle, notificationMessage, pendingIntent);
notificationManager.notify(10001, notification);
但在这里,我还需要在应用关闭时收到通知。所以,任何人都可以帮助我。
答案 0 :(得分:14)
在您的应用中添加(已启动)Service
。即使用户退出了您的应用,该服务仍将在后台运行。
此外,您可以实现一个BroadcastReceiver,它将侦听手机的Intents,并在手机启动时启动您的服务!
<强> MyService.java 强>
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId){
// START YOUR TASKS
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// STOP YOUR TASKS
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent){
return null;
}
<强> BootReceiver.java 强>
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Intent serviceIntent = new Intent("your.package.MyService");
context.startService(serviceIntent);
}
}
}
}
<强>的AndroidManifest.xml 强>
清单标签中的//
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
//在您的应用程序标记中
<service android:name=".MyService">
<intent-filter>
<action android:name="your.package.MyService" />
</intent-filter>
</service>
<receiver
android:name=".BootReceiver"
android:enabled="true"
android:exported="true"
android:label="BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
如果您想从某项活动开始服务,请使用
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (MyService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
if (!isMyServiceRunning()){
Intent serviceIntent = new Intent("your.package.MyService");
context.startService(serviceIntent);
}
答案 1 :(得分:5)
如果数据来自您的服务器,那么使用GCM可能是一种很好的方法。在这种情况下,服务器将能够唤醒/启动您的应用程序。
创建一个在您的情况下不断运行的服务是一个糟糕的解决方案。 IMO更好的方法是使用AlarmManager。警报管理器将在特定时间调用意图。 (请注意,如果手机重新启动,则必须再次注册意图。)