是否可以在同一时间设置7天的报警?

时间:2016-03-25 12:42:02

标签: android notifications alarmmanager alarm

我正在处理警报应用程序。我试图实施警报通知并每天收到通知,但我需要设置警报7天,之后必须取消。每当七天我都在广播接收器中取消它,但是我也会在七天后收到通知。

public class MyTest extends AppCompatActivity {

    AlarmManager alarmManager;
    SharedPreferences preferences;

    SharedPreferences.Editor editor;
    PendingIntent pendingIntent;
    int RequestCode =777;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_test);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        AlarmReciever alarm = new AlarmReciever();
        //  alarm.setAlarm(this);
        int alarmId = 0;
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        Intent alarmIntent = new Intent(MyTest.this, AlarmReciever.class); // AlarmReceiver1 = broadcast receiver
        alarmIntent.putExtra("alarmId", alarmId);
        pendingIntent = PendingIntent.getBroadcast(MyTest.this, RequestCode, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        // alarmIntent.setData((Uri.parse("custom://" + System.currentTimeMillis())));

        Calendar alarmStartTime = Calendar.getInstance();
        Calendar now = Calendar.getInstance();
        alarmStartTime.set(Calendar.HOUR_OF_DAY, 00);
        alarmStartTime.set(Calendar.MINUTE, 00);
        alarmStartTime.set(Calendar.SECOND, 0);

        Log.d("Alarm", now.toString());
        /// int count= 0;
        // last i added for comparision
        if (now.after(alarmStartTime)) {
            //second
            Log.d("Alarm", "Added a day");
            alarmStartTime.add(Calendar.DATE, 1);
            // count++;

        }
        /*  System.out.println(count);
        if(count==7){
            alarmManager.cancel(pendingIntent);

        }*/

        // for(int i=0;i<7;i ++) {
            //  alarmManager.set(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis() + 1000 * 60 * 60 * 24 /*AlarmManager.INTERVAL_DAY*/, pendingIntent);
             alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis() , AlarmManager.INTERVAL_DAY, pendingIntent);

            Log.d("Alarm", "Alarms set for everyday 8 am.");

        //  }
    }   
}

广播接收器

public class AlarmReciever extends BroadcastReceiver {
    SharedPreferences preferences;
    SharedPreferences.Editor editor;
    int count=0;
    AlarmManager alarmManager;
    PendingIntent pendingIntent;
    int RequestCode =777;
    @Override
    public void onReceive(Context context, Intent intent) {
          // String rec = intent.getDataString();
       // Log.d("Alarm",rec);


        Intent service1 = new Intent(context, NotificationService.class);
       // service1.setData((Uri.parse("custom://" + System.currentTimeMillis())));
        context.startService(service1);
           count++;
        preferences = context.getSharedPreferences("MyCount", Context.MODE_PRIVATE);
        editor=preferences.edit();
        editor.putInt("COUNT", count);
        editor.commit();
          incrementSum(context);

    }

 public void  incrementSum(Context context){

    int cou = preferences.getInt("COUNT",0);
    //  System.out.println(cou);
    // int c=0;
    //  int cou = preferences.getInt("COUNT",0);
    int co = preferences.getInt("C",0);
    if(cou==1){
        cou=co+1;
        editor = preferences.edit();
        editor.putInt("C",cou);
        editor.commit();
    }

    int c = preferences.getInt("C",0);
    // System.out.println("count"+cou);
    // int count = preferences.getInt("COUNT",0);
    // System.out.println("last"+count);
    System.out.println("sum" + c);
    if(c>=7) {

        Intent alarmIntent = new Intent(context, AlarmReciever.class);
        pendingIntent = PendingIntent.getBroadcast(context, RequestCode, alarmIntent,  PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if (alarmManager!= null) {
            alarmManager.cancel(pendingIntent);
        }
        // alarmManager.cancel(pendingIntent);
    }
    // AlarmManager   alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
}

通知服务

public class NotificationService extends IntentService {

    private NotificationManager notificationManager;
    private PendingIntent pendingIntent;
    private static int NOTIFICATION_ID = 1;
    Notification notification;


    public NotificationService() {
        super("testing.amaze.com.mytest");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Context context = this.getApplicationContext();
        notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        Intent mIntent = new Intent(this, ActivityTwo.class);
        Bundle bundle = new Bundle();
        bundle.putString("test", "test");
        mIntent.putExtras(bundle);
        pendingIntent = PendingIntent.getActivity(context, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        Resources res = this.getResources();
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        //   Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
        notification = new NotificationCompat.Builder(this)
                .setContentIntent(pendingIntent)
                //.setSmallIcon(R.drawable.ic_launcher)
                //.setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.ic_launcher))
                .setTicker("ticker value")
                .setAutoCancel(true)
                .setPriority(8)
              //  .setSound(soundUri)
                .setContentTitle("Notif title")
                .setContentText("Text").build();
        notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;
        notification.defaults |= Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE;
        notification.ledARGB = 0xFFFFA500;
        notification.ledOnMS = 800;
        notification.ledOffMS = 1000;
        notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(NOTIFICATION_ID, notification);
        Log.i("notif", "Notifications sent.");

    }

2 个答案:

答案 0 :(得分:0)

用于设置闹钟

public void setAlarm(Context context,int alarm_id) {
        int u_id = alarm_id;

        Intent intent1 = new Intent(context, AlarmBrodcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(
                context, u_id, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager am = (AlarmManager) context
                .getSystemService(context.ALARM_SERVICE);
        am.setRepeating(AlarmManager.RTC_WAKEUP, timetoSet,
                AlarmManager.INTERVAL_DAY, pendingIntent);
    }

取消警报

public void cancelAarm(Context context,int alarm_id) {
        int u_id = alarm_id;
        Intent intent1 = new Intent(context, AlarmBrodcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(
                context, u_id, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager am = (AlarmManager) context
                .getSystemService(context.ALARM_SERVICE);
        am.cancel(pendingIntent);
    }

答案 1 :(得分:0)

要取消之前安排的闹钟,您需要使用相同的PendingIntent。为了简化这一点,创建了一个方法来获取带有一些请求代码的PendingIntent。像

private PendingIntent getPendingIntent(int requestCode) {
    Intent intent = new Intent(context,YourAlarmssReceiver.class);
    return PendingIntent.getBroadcast(context, requestCode,intent,0);
}

并使用

((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).cancel(getPendingIntent(yourRequestCode));

将您的请求代码保留在共享偏好设置中,以便在7天后获取。

编辑:

BroadcastReciever开始NotificationService之后,只需拨打incrementSum方法

    public void  incrementSum(Context context){

      int cou = preferences.getInt("COUNT",0);
        cou++;
        editor = preferences.edit();
        editor.putInt("COUNT",cou);
        editor.commit();

    if(COUNT>=7) {

        Intent alarmIntent = new Intent(context, AlarmReciever.class);
        pendingIntent = PendingIntent.getBroadcast(context, RequestCode, alarmIntent,  PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if (alarmManager!= null) {
            alarmManager.cancel(pendingIntent);
        }
        // alarmManager.cancel(pendingIntent);
    }
  }