現在、私のアプリで毎日の通知が機能するように設定しようとしていますが、毎日の通知は機能しません。私は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上のいくつかの質問を読んだが、質問からの答えは私を助けませんでした。
投稿したコードでは、設定した直後にアラームがかなり発せられると思います。それは何が起こっているのですか? –
ほとんどの場合、10分から30分の間に通知が届くので、すぐには起動しません。 –
Hmm、OK。まあ、とにかく、あなたは警報の時間を正しく設定していません。 'Calendar'インスタンスを目的の時刻で初期化しますが、' AlarmManager#set *() '呼び出しでその時刻を決して渡すことはないことに注意してください。 'AlarmManager.INTERVAL_DAY'を渡します。これは、リアルタイムクロックで常に過去のものです。代わりに 'calendar.getTimeInMillis()'を渡します。 –