每次关闭应用程序时都会显示通知

时间:2015-03-16 08:39:14

标签: android android-notifications android-alarms android-calendar

我创建了一个在特定时间显示的通知,但问题是每次关闭应用程序时(在前缀时间之后)都会显示通知。我该如何解决这个问题?

这是我的代码: Home.class (是片段)

Calendar calend = Calendar.getInstance();
        calend.setTimeInMillis(System.currentTimeMillis());
        calend.set(Calendar.HOUR_OF_DAY, 9);
        calend.set(Calendar.MINUTE, 27);
        calend.set(Calendar.SECOND, 0);
        Intent myIntent = new Intent(getActivity(), MyReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent,0);
        AlarmManager alarmManager = (AlarmManager)getActivity().getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calend.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

MyReceiver.class

public class MyReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent)
    {


       Intent service1 = new Intent(context, MyAlarmService.class);
       context.startService(service1);

    }   
}

MyAlarmService.class

public class MyAlarmService extends Service 
{

   private NotificationManager mManager;

    @Override
    public IBinder onBind(Intent arg0)
    {
       // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() 
    {
       // TODO Auto-generated method stub  
       super.onCreate();
    }

   @SuppressWarnings({ "static-access", "deprecation" })
   @Override
   public void onStart(Intent intent, int startId)
   {
       super.onStart(intent, startId);

       mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE);
       Intent intent1 = new Intent(this.getApplicationContext(),MainActivity.class);

       Notification notification = new Notification(R.drawable.ic_launcher,"This is a test message!", System.currentTimeMillis());
       intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP);

       PendingIntent pendingNotificationIntent = PendingIntent.getActivity( this.getApplicationContext(),0, intent1,PendingIntent.FLAG_UPDATE_CURRENT);
       notification.flags |= Notification.FLAG_AUTO_CANCEL;
       notification.setLatestEventInfo(this.getApplicationContext(), "AlarmManagerDemo", "This is a test message!", pendingNotificationIntent);

       mManager.notify(0, notification);
    }

    @Override
    public void onDestroy() 
    {
        // TODO Auto-generated method stub
        super.onDestroy();
    }

}

2 个答案:

答案 0 :(得分:1)

我有一个答案。

不要使用相同的服务。你只需要在MyReceiver类中编写以下代码,当你从任务管理器中删除应用程序时它不会给你通知。

public class AlarmReceiver extends BroadcastReceiver {
        private NotificationManager mManager;

        private static final int MY_NOTIFICATION_ID = 1;
        private static final String TAG = "AlarmNotificationReceiver";

        // Notification Text Elements
        private final CharSequence tickerText = "its ok?";
        private final CharSequence contentTitle = " Reminder1";
        private final CharSequence contentText = "reminder content";

        // Notification Action Elements
        private Intent mNotificationIntent;
        private PendingIntent mContentIntent;

         @Override
         public void onReceive(Context context, Intent intent) {
         // When our Alaram time is triggered , this method will be excuted (onReceive)



             mNotificationIntent = new Intent(context, MyView.class);

             // The PendingIntent that wraps the underlying Intent
             mContentIntent = PendingIntent.getActivity(context, 0,mNotificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);

             // Build the Notification
             Notification.Builder notificationBuilder = new Notification.Builder(
                     context).setTicker(tickerText)
                     .setSmallIcon(android.R.drawable.stat_sys_warning)
                     .setAutoCancel(true).setContentTitle(contentTitle)
                     .setContentText(contentText).setContentIntent(mContentIntent);

             // Get the NotificationManager
             NotificationManager mNotificationManager = (NotificationManager)context
                     .getSystemService(Context.NOTIFICATION_SERVICE);

             // Pass the Notification to the NotificationManager:
             mNotificationManager.notify(MY_NOTIFICATION_ID,
                     notificationBuilder.build());

        }

    } 

答案 1 :(得分:0)

你能阅读这篇文章: Will AlarmManager work if my application is not running? AlarmManager会一直保持警报,直到设备重启或者你杀了应用程序。从最近的列表中删除它将杀死该应用程序。

这并没有解释为什么会显示通知,但我想系统会在查杀期间执行您的请求。它应该删除它,但也许(这里没有证明)它优先发送广播保证