2015-12-04 5 views
2

Я создаю приложение, которое вызывает уведомление в 11:30 IST. Я протестировал его работу, но после 11:30. Когда я открываю приложение, он выдает уведомление ...Запланированные уведомления Триггеры Каждый раз, когда я открываю приложение

я не знаю, почему я думаю, что это должно быть какая-то ошибка в состоянии вовремя проверки ...

я хочу уведомление срабатывать по времени только один раз в день ... а потом на следующий день ... :)

разрешите это заблаговременно

**MainActivity.java** 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
spinner = (ProgressBar)findViewById(R.id.progressBar); 
spinner.setVisibility(View.GONE); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 11); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 00); 
Intent intent1 = new Intent(MainActivity.this, AlarmReciever.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0,intent1, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
} 


**AlarmReciever.java** 

package com.alivestats.alivestats; 

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.support.v4.app.NotificationCompat; 
public class AlarmReciever extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    int MID = 1; 

    long when = System.currentTimeMillis(); 
    NotificationManager notificationManager = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 

    Intent notificationIntent = new Intent(context, MainActivity.class); 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
      notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 


    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

    NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
      context).setSmallIcon(R.drawable.background) 
      .setContentTitle("title") 
      .setContentText("description").setSound(alarmSound) 
      .setAutoCancel(true).setWhen(when) 
      .setContentIntent(pendingIntent) 
      .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000}); 
    notificationManager.notify(MID, mNotifyBuilder.build()); 
    MID++; 

} 

} 
+0

который <фильтр-замысел> вы передали вашему BroadcastReceiver, зарегистрировав его в манифесте.? –

+0

Как вы получили время до 11:30? –

+0

Я только что положил <приемник андроида: name = "com.android.app.AlaramReceiver" /> –

ответ

1

После так много чая и кофе я закодированы Ответ на этот вопрос сам ...

long t = System.currentTimeMillis(); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 11); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 00); 
if (t <= calendar.getTimeInMillis()) { 
     //calendar.add(Calendar.DATE, 6); //add 6 days. 
     Intent intent1 = new Intent(MainActivity.this, AlarmReciever.class); 
     intent1.setAction("NOTE"); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE); 
     am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
     //am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
    } 

    else{ 

    } 

я только по сравнению системное время с уведомлением временени времени notifcation меньше равно системное время его истинное и приемник будет work..but, если не тогда ничего не случится ...

BTW спасибо за помощь @tiny и @Mahesh

0
Intent intent1 = new Intent(MainActivity.this, AlarmReciever.class); 
intent1 .setAction("ilove"); 


public void onReceive(Context context, Intent intent) { 
if(!"ilove" .equalsIgnoreCase(getAction()))log.e("test",intent.getAction()); 
} 


<receiver android:name="com.android.app.AlaramReceiver" android:exported="false"> 
<intent-filter> 
<action android:name="ilove" /> 
</intent-filter> 
</receiver> 
+0

где поставить функциюRecieve() в MainActivity или AlarmReciever? @ tiny –

+0

Это просто в вашем AlarmReciever. –

+0

вам просто нужно добавить действие в том месте, где вы создаете PendingIntent, и проверить действие, прежде чем показывать уведомление. –

0

календарь календарь = Calendar.getInstan се();

  calendar.set(Calendar.HOUR, 6); 

    int myPreferedTime=calendar.get(Calendar.HOUR); 


    Calendar rightNow = Calendar.getInstance(); 

    int currentHour = rightNow.get(Calendar.HOUR_OF_DAY); 
    Log.i("current time","is"+currentHour); 


    int difference=myPreferedTime-currentHour; 

    Log.i("Differencevalue","is"+difference); 

    switch(difference) 
    { 
     case 1: 

      rightNow.add(Calendar.HOUR_OF_DAY, 1); 
      break; 

     case 2: 

      rightNow.add(Calendar.HOUR_OF_DAY, 2); 
      break; 

     case 3: 

      rightNow.add(Calendar.HOUR_OF_DAY, 3); 
      break; 

     case 4: 

      rightNow.add(Calendar.HOUR_OF_DAY, 4); 
      break; 

     case 5: 

      rightNow.add(Calendar.HOUR_OF_DAY, 5); 
      break; 
     case 6: 

      rightNow.add(Calendar.HOUR_OF_DAY, 0); 
      break; 

     case -1: 
      rightNow.add(Calendar.HOUR_OF_DAY,23); 
      break; 

     case -2: 
      rightNow.add(Calendar.HOUR_OF_DAY,22); 
      break; 

     case -3: 
      rightNow.add(Calendar.HOUR_OF_DAY,21); 
      break; 
     case -4: 
      rightNow.add(Calendar.HOUR_OF_DAY,20); 
      break; 
     case -5: 
      rightNow.add(Calendar.HOUR_OF_DAY,19); 
      break; 

     case -6: 
      rightNow.add(Calendar.HOUR_OF_DAY,18); 
      break; 
     case -7: 
      rightNow.add(Calendar.HOUR_OF_DAY,17); 
      break; 
     case -8: 
      rightNow.add(Calendar.HOUR_OF_DAY,16); 
      break; 
     case -9: 
      rightNow.add(Calendar.HOUR_OF_DAY,15); 
      break; 
     case -10: 
      rightNow.add(Calendar.HOUR_OF_DAY,14); 
      break; 
     case -11: 
      rightNow.add(Calendar.HOUR_OF_DAY,13); 
      break; 
     case -12: 
      rightNow.add(Calendar.HOUR_OF_DAY,12); 
      break; 
     case -13: 
      rightNow.add(Calendar.HOUR_OF_DAY,11); 
      break; 
     case -14: 
      rightNow.add(Calendar.HOUR_OF_DAY,10); 
      break; 
     case -15: 
      rightNow.add(Calendar.HOUR_OF_DAY,9); 
      break; 

     case -16: 
      Log.i("am here","bcoz time is 11 clock"); 
      rightNow.add(Calendar.HOUR_OF_DAY, 8); 
      break; 

     case -17: 
      rightNow.add(Calendar.HOUR_OF_DAY,7); 
      break; 
     case -18: 
      rightNow.add(Calendar.HOUR_OF_DAY,6); 
      break; 
     default: 
      break; 


    } 

     Intent intent1 = new Intent(MainActivity.this, MyReceiver.class); 

     PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent1, 0); 
     Log.i("am sending", "yes"); 
     AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
     Log.i("time holding with me", "calendar stores time like" + rightNow.getTimeInMillis()); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, rightNow.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY, pendingIntent); 
+0

Я работал неделю, чтобы преодолеть проблему запланированных уведомлений-триггеров-каждый раз-i- open-app и предоставление этого решения, если у кого есть сомнения, пожалуйста, l et me know –

+0

Просьба предоставить более подробную информацию для вашего ответа. Недостаточно добавить скрипт. – Hristo

+0

в вышеприведенном скрипте я делаю математический расчет, делаю разницу между текущим часом и myprefered часом и исходя из значения разницы, я решил добавить часы к приложению, чтобы он сообщал уведомление каждое утро между 6:00 (AM) - (7:00) –

Смежные вопросы