即使应用程序关闭,也要确保通知仍然存在

时间:2012-09-04 04:20:02

标签: android notifications

我正在处理一个应用程序,它会在触发警报时显示通知。通知仅在应用程序仍在运行时显示,但我希望即使应用程序关闭也会保留通知,因此当用户选择通知时,它将再次运行应用程序。这样做有什么办法吗?任何帮助将不胜感激。我还要感谢提供的任何示例或教程。非常感谢你。

2 个答案:

答案 0 :(得分:3)

我正在使用

alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);

我希望将来通过alarmMenager推送通知 当app仍在运行时它可以工作,而我调用allarm menager在futer中设置notify并关闭app我的通知没有显示。 我必须做什么?

这里你有我的活动发件人:

Calendar cal = Calendar.getInstance();
 cal.set(Calendar.HOUR, HOUR_OF_DAY);
 cal.set(Calendar.MINUTE, MINUTE);
 //cal.add(Calendar.SECOND, SECOND_OF_DAY);
 Intent intent = new Intent(UnityPlayer.currentActivity, TimeAlarm.class);
 intent.putExtra("alarm_status", statusMessage);
 intent.putExtra("alarm_title", title);
 intent.putExtra("alarm_content", content);
 Log.i("SenderEvent ", "przygotowane dane");
 PendingIntent sender = PendingIntent.getBroadcast(UnityPlayer.currentActivity.getApplicationContext(), REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
 am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);

和接收者:

Bundle bundle = intent.getExtras();
        String statusMessage = bundle.getString("alarm_status");
        String title = bundle.getString("alarm_title");
        String content = bundle.getString("alarm_content");
        nm = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
                new Intent(), 0);
Notification notif =new Notification();//R.drawable.ic_launcher,statusMessage, System.currentTimeMillis());;
        //notif.largeIcon = bitmap;
        notif.icon =2130837504;
        notif.tickerText=statusMessage;
        notif.when= System.currentTimeMillis(); 
        /*
        new Notification(0,
                statusMessage, System.currentTimeMillis());*/
        notif.setLatestEventInfo(context, title, content, contentIntent);
        nm.notify(NOTIFY_ME_ID, notif);

当应用程序关闭时,将来推送通知有什么不对?

答案 1 :(得分:0)

首先,您需要使用服务创建通知。我之前有同样的问题。我正在使用phonegap,并从插件创建通知,但事实证明只有服务可以在后台运行。在服务中,我然后添加我的代码来创建通知,对于意图我使用广播接收器。

      notificationManager = (NotificationManager) context.getSystemService(android.content.ContextWrapper.NOTIFICATION_SERVICE);
      note = new Notification(imageResource, tickerText, System.currentTimeMillis() );

     // Intent notificationIntent = new Intent(context, path.to.class);
      Intent notificationIntent = new Intent(context, package.path.to.receiver.class);

      notificationIntent.setAction(Intent.ACTION_VIEW);
      notificationIntent = notificationIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

      //contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
      contentIntent = PendingIntent.getBroadcast(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
      note.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

正如您在上面的代码中看到的,我注释掉了getActivity,并将其更改为getBroadcast。这是在服务中运行意味着您可以在应用关闭时收到通知。为了让接收者能够打开你的应用程序,如果关闭添加

...

@Override
public final void onReceive(Context context, Intent intent) {
    Log.v('TAG','TEST');


     //start activity
    Intent i = new Intent();
    i.setClassName("package.path", "package.path.mainActivity");
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}
...

和xml

 <receiver android:name="path.to.receiver" android:label="@string/app_name">
   <intent-filter>
      <action android:name="path.to.receiver.BROADCAST" />
   </intent-filter>
</receiver>

我希望这会有所帮助