2016-05-12 4 views
0

現在、私のアプリで毎日の通知が機能するように設定しようとしていますが、毎日の通知は機能しません。私はAlarmanagerを設定する方法Alarmanagerで毎日の通知がランダムに発生する

MainActivity:私BroadcastReceiverザッツ

Intent i = new Intent(this, NotificationDbReceiver.class); 
    Intent start = new Intent(this, StartService.class); 

    PendingIntent sender = PendingIntent.getBroadcast(this, 0, i, 0); 
    Calendar calendar = Calendar.getInstance(); 
      Calendar now = Calendar.getInstance(); 
      calendar.set(Calendar.HOUR_OF_DAY, 10); 
      calendar.set(Calendar.MINUTE, 00); 
      calendar.set(Calendar.SECOND, 00); 

      if (calendar.before(now)) { 
       calendar.add(Calendar.DATE, 1); 
      } 

      AlarmManager am = (AlarmManager) this 
        .getSystemService(ALARM_SERVICE); 

      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
       am.set(AlarmManager.RTC_WAKEUP, 
         AlarmManager.INTERVAL_DAY, sender); 
      } else if (Build.VERSION_CODES.KITKAT <= Build.VERSION.SDK_INT && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
       am.setExact(AlarmManager.RTC_WAKEUP, 
         AlarmManager.INTERVAL_DAY, sender); 
      } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 
         AlarmManager.INTERVAL_DAY, sender); 
      } 

:私は、誰かが私を助けることができると思います

public class StartService extends Service { 

private final int ID = 0; 

private Context mContext; 


@Override 
public void onCreate() { 
    super.onCreate(); 

    mContext = getBaseContext(); 

    Log.i("onCreate", "I'm in"); 

    createNotification(); 

} 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

private void createNotification() { 
    Log.i("createNotification", "I'm in"); 
    Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext); 
    mBuilder.setSmallIcon(R.drawable.ic_stat_notification) 
      .setColor(ContextCompat.getColor(mContext, R.color.primary)) 
      .setContentTitle("Blablabla") 
      .setContentText("Blablabla") 
      .setStyle(new NotificationCompat.BigTextStyle().bigText("Blablabla")) 
      .setSound(soundUri) 
      .setDefaults(Notification.DEFAULT_VIBRATE) 
      .setCategory(NotificationCompat.CATEGORY_MESSAGE) 
      .setPriority(Notification.PRIORITY_HIGH) 
      .setAutoCancel(true); 

    Intent mIntent = new Intent(mContext, MainActivity.class); 
    PendingIntent mPendingIntent = PendingIntent.getActivity(mContext, 0, mIntent, 0); 
    mBuilder.setContentIntent(mPendingIntent); 
    Notification mNotification = mBuilder.build(); 
    mNotification.flags = Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL; 
    NotificationManagerCompat.from(mContext).notify(ID, mNotification); 
} 
} 

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

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

は、これは私のサービスです。私はすでにstackoverflow上のいくつかの質問を読んだが、質問からの答えは私を助けませんでした。

+0

投稿したコードでは、設定した直後にアラームがかなり発せられると思います。それは何が起こっているのですか? –

+0

ほとんどの場合、10分から30分の間に通知が届くので、すぐには起動しません。 –

+0

Hmm、OK。まあ、とにかく、あなたは警報の時間を正しく設定していません。 'Calendar'インスタンスを目的の時刻で初期化しますが、' AlarmManager#set *() '呼び出しでその時刻を決して渡すことはないことに注意してください。 'AlarmManager.INTERVAL_DAY'を渡します。これは、リアルタイムクロックで常に過去のものです。代わりに 'calendar.getTimeInMillis()'を渡します。 –

答えて

0

AlarmManagerを複数回(たとえば、Activityが起動するたびに)初期化していることがあります。一度だけ設定して確認してください。

+0

メソッドを呼び出す前にすでにチェックしていますが、サービスが実行中です –

関連する問題