如何在应用关闭时获取Android通知?

时间:2012-12-06 10:42:17

标签: android notifications android-notifications

从webserivce我以日期和时间的形式获取数据,意味着某些特定日期我有一些插槽。下图给出了详细说明。 enter image description here

在每个日期,我都有一些时间安排。这里我想要的是在特定的日期和时间显示通知。如果数据库的响应包含明天日期,如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);

但在这里,我还需要在应用关闭时收到通知。所以,任何人都可以帮助我。

2 个答案:

答案 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。警报管理器将在特定时间调用意图。 (请注意,如果手机重新启动,则必须再次注册意图。)