2016-03-25 15 views
0

Alarm uygulaması üzerinde çalışıyorum. Alarm bildirimi uygulamaya çalıştım ve her gün için bildirimler aldım ancak 7 gün boyunca alarm vermem gerekiyor. Yedi gün boyunca yayın alıcımda iptal ettim, ama yine de yedi gün sonra bildirimleri alıyorum.7 gün boyunca aynı anda alarmı ayarlamak mümkün mü?

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."); 

     // } 
    } 
} 

Yayın Alıcısı

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); 
} 

Bildirim hizmet kümesi Alarmı İçin

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."); 

    } 
+1

Lütfen kodunuzu paylaşın. – bwegs

+0

, alarmı tetiklemeyi denediğinde alarmı iptal edip "System.currentTimeInmillis + öğütme işleminde 7 gün içinde saklayacak olan Paylaşılan Tercihte uzun bir değişken değişkeni" kaydedebilirsiniz. – kishorepatel

+0

alarmı http://stackoverflow.com/questions/14485368/delete-alarm-from-alarmmanager-using-cancel-android ve bu http://stackoverflow.com/questions/3330522/how-to-cancel iptal etmek için okuyun -bu yinelenen alarm – kishorepatel

cevap

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); 
    } 
Daha önce size PendingIntent aynı kullanmak zorunda planlanan Alarmı iptal etmek için
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); 
    } 
0

Alarm

İptal için

. Bunu basitleştirmek için bazı istek kodu ile PendingIntent almak için bir yöntem oluşturun. gibi

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

ve

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

7 gün sonra bunu elde etmek payı tercihlerinde isteğiniz kodu tutmak kullanın.

DÜZENLEME: Giriş

senin BroadcastReciever, NotificationService başladıktan sonra sadece incrementSum yöntemini çağırın.

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); 
    } 
    } 
+0

üzgünüm, ben anlamadım .. İstenilen niyet yöntemi oluşturmam gerekiyor ve zaten beklemede istek kodu belirledim ve neden tercih edilen kodu tercih tercih ettim? – Latha

+0

msLatha, bir kez düzenleme konusuna bakın. – shobhan

+0

üzgünüm .. bu da bir tane çalışmıyor. hala 7 gün sonra bildirim alıyorum. @ shobhan – Latha

İlgili konular