2012-10-29 21 views
8
Ben kullanıcı onu tebliğ ile bir şeyler hatırlatmak istiyor ne zaman gündelik karar versin bir uygulamayı yapmak istiyorum

...bildirimler

İsterdim

nasıl ben olabilirim ki bilmek kullanıcının saat 7: 00’yi istediği belirli bir zamanda tetiklemesini sağlamak ve bildirime dokunup uygulamayı belirli bir etkinliğe girmesini sağlamak. Ancak, kullanıcı daha fazla bildirim almak istemediğinde (tek bir tıklama ile) tüm bildirimleri nasıl iptal ederim?

ben .... şimdiye kadar

Teşekkür ...

< < >>

ben bu

yapıyorum

Intent intent = new Intent(this, main.class); 
Bundle bundle = new Bundle(); 
bundle.putString("title", "Some Title");\ 
intent.putExtras(bundle); 
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0); 
String body = "Tap to see the Activity"; 
String title = "Title of notification"; 
Notification n = new Notification(R.drawable.ic_launcher, body, System.currentTimeMillis()); 
n.setLatestEventInfo(this, title, body, pi); 
n.defaults = Notification.DEFAULT_ALL; 
nm.notify(uniqueID, n); 

gibi bir şey ama hiçbir şans yapılan

 String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 

     int icon = R.drawable.notification_icon; 
     CharSequence tickerText = "Ome TickerText"; 
     long when = System.currentTimeMillis(); 
     Context context = getApplicationContext(); 
     CharSequence contentTitle = "Some Title"; 
     CharSequence contentText = "Some Text"; 

     Intent notificationIntent = new Intent(context, LandingActivity.class); 
     Bundle bundle = new Bundle(); 
     bundle.putString("title", "a title"); 
     bundle.putString("title2", "title number 2"); 
     bundle.putString("action", "tip"); 
     bundle.putString("greek", "somehting else"); 
     bundle.putInt("action_num", 2); 
     notificationIntent.putExtras(bundle); 
     alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     contentIntent = PendingIntent.getActivity(Notifications.this, 0, notificationIntent, 0); 

     Notification notification = new Notification(icon, tickerText, when); 
     notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
     notification.defaults = Notification.DEFAULT_ALL; 

     mNotificationManager.notify(UniqueID, notification); 

     int hour = tp.getCurrentHour(); 
     int minutes = tp.getCurrentMinute(); 

     contentIntent = PendingIntent.getService(Notifications.this, 0, notificationIntent, 0); 
     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(Calendar.HOUR_OF_DAY, hour); 
     calendar.set(Calendar.MINUTE, minutes); 
     calendar.set(Calendar.SECOND, 00); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), contentIntent); 

ama şansınız yok ...

herhangi bir yardım lütfen?

cevap

24

Kullanım alarm manager ve NotifyService sınıfa

Intent myIntent = new Intent(Current.this , NotifyService.class);  
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
pendingIntent = PendingIntent.getService(ThisApp.this, 0, myIntent, 0); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 12); 
calendar.set(Calendar.MINUTE, 00); 
calendar.set(Calendar.SECOND, 00); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY , pendingIntent); //set repeating every 24 hours 
+1

Uygulama kapalı olsa bile, belirli bir zamanda her gün görüntülenmeden önce durumu denetlemek için koşulları nasıl kullanabilirim – Si8

2

içinde bildirim koymak Bu eski bir soru olduğunu biliyorum ama benzer bir şartı vardı ve bu benim yaptığım budur. Mevcut sistem zamanı ile millis'te bildirim göndermek için planlanan zaman arasındaki farkı buldum ve bir android hizmetinde çalıştırılabilir bir uygulama gerçekleştirdim. Aşağıdaki kod, Notifyservice'de olacaktır.

private Handler notificationTimer = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     if(msg.what==0) { 
       sendNotifications(); 
     } 
     super.handleMessage(msg); 
    } 
}; 
private Runnable notificationCaller = new Runnable() { 

    @Override 
    public void run() { 
     Message msg = notificationTimer.obtainMessage(); 
     msg.what = 0; 
     notificationTimer.sendMessage(msg); 
    } 
};   


    Calendar calendar = Calendar.getInstance(); 
    Calendar timefornotification = Calendar.getInstance(); 
    timefornotification.set(Calendar.HOUR_OF_DAY, 12); 
    timefornotification.set(Calendar.MINUTE, 30); 
    timefornotification.set(Calendar.SECOND, 00); 

    Long difference = calendar.getTimeInMillis() - timefornotification.getTimeInMillis(); 

    if(difference<0){ 
     notificationTimer.postDelayed(notificationCaller, -(difference)); 
    } 
    else{ 
     notificationTimer.postDelayed(notificationCaller, difference); 
    } 

    public void sendNotifications(){ 
     ------Your code here------- 
     notificationTimer.removeCallbacksAndMessages(null); 
     notificationTimer.postDelayed(notificationCaller, 86400000); 
     ------86400000 is one day. So it will repeat everyday------- 
    } 

Ardından, arka planda çalıştırmak için ana sınıftaki bir servisi arayabilirsiniz.

Intent service = new Intent(this, NotifyService.class); 
    this.startService(service);