بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
کار نکردن آلارم منیجر برای زمان های بزرگ
سلام من دارم از آلارم منیجیر برای انجام یک کار در دوره زمانی مشخص (روزانه، هفتگی و ماهانه استفاده می کنم)
وقتی با استفاده از کد زیر برای زمانهای کوتاه مثل 1 دقیقه، 5 دقیقه و ... آلارم منیجر رو ست می کنم مشکلی نیست و در زمان مقرر کارم انجام میشه اما وقتی برای یک روز یا یک هفته ست می کنم کار نمی کنه لطفا راهنماییم کنید
AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, Alarm.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+(24*60*60*1000), 24*60*60*1000, pi);
0
0
دوستان لطفا کمکم کنید کسی در این زمینه اطلاعاتی نداره (10 سال پیش)
برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال
atf
10 سال پیش
+4
0
private static void setAlarm(Context context, Calendar alarmDate, PendingIntent pIntent) {
AlarmManager alarmManager = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmDate.getTimeInMillis(), pIntent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmDate.getTimeInMillis() - 15, pIntent); }
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmDate.getTimeInMillis(), pIntent); }
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmDate.getTimeInMillis(), pIntent); } }
پاسخ به سوال
atf
10 سال پیش
+5
0
این یک کلاس کامل برای آلارم هست امیدوارم مفید واقع بشه
که میتونید نسبت به نیاز خودتون ویرایش کنید
public class AlarmManagerHelper extends BroadcastReceiver {
public static final String ID = "id";
public static final String TIME_HOUR = "timeHour";
public static final String TIME_MINUTE = "timeMinute";
public static final String TONE = "alarmTone";
@Override
public void onReceive(Context context, Intent intent) {
setAlarms(context);
}
public static void setAlarms(Context context) {
cancelAlarms(context);
AlarmDBHelper dbHelper = new AlarmDBHelper(context);
List<AlarmModel> alarms = dbHelper.getAlarms();
Calendar nextAlarm = null;
if (alarms != null) {
for (AlarmModel alarm : alarms) {
if (alarm.isEnabled) {
PendingIntent pIntent = createPendingIntent(context, alarm);
Calendar alarmDate = Calendar.getInstance();
alarmDate.set(Calendar.HOUR_OF_DAY, alarm.timeHour);
alarmDate.set(Calendar.MINUTE, alarm.timeMinute);
alarmDate.set(Calendar.SECOND, 0);
// don't set alarms in the past
Calendar cur = Calendar.getInstance();
while (cur.after(alarmDate)) {
alarmDate.add(Calendar.DATE, 1);
}
// only set more than 24hr in the future if a specific day
// of week is selected
// otherwise, the next closest time should be used
if (alarm.repeatWeekly) {
while (!alarm.getRepeatingDay(alarmDate
.get(Calendar.DAY_OF_WEEK) - 1)) {
alarmDate.add(Calendar.DATE, 1);
}
}
if (nextAlarm == null || nextAlarm.after(alarmDate)) {
nextAlarm = (Calendar) alarmDate.clone();
}
setAlarm(context, alarmDate, pIntent);
}
}
}
if (nextAlarm != null) {
SimpleDateFormat sdf = new SimpleDateFormat("M/d h:mm a", Locale.US);
sdf.setCalendar(nextAlarm);
Settings.System.putString(context.getContentResolver(),
Settings.System.NEXT_ALARM_FORMATTED,
sdf.format(nextAlarm.getTime()));
} else {
Settings.System.putString(context.getContentResolver(),
Settings.System.NEXT_ALARM_FORMATTED, "");
}
}
private static void setAlarm(Context context, Calendar alarmDate,
PendingIntent pIntent) {
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP,
alarmDate.getTimeInMillis(), pIntent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
alarmDate.getTimeInMillis() - 15, pIntent);
}
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
alarmDate.getTimeInMillis(), pIntent);
}
alarmManager.set(AlarmManager.RTC_WAKEUP,
alarmDate.getTimeInMillis(), pIntent);
}
}
public static void cancelAlarms(Context context) {
AlarmDBHelper dbHelper = new AlarmDBHelper(context);
List<AlarmModel> alarms = dbHelper.getAlarms();
if (alarms != null) {
for (AlarmModel alarm : alarms) {
if (alarm.isEnabled) {
PendingIntent pIntent = createPendingIntent(context, alarm);
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pIntent);
}
}
}
}
private static PendingIntent createPendingIntent(Context context,
AlarmModel model) {
Intent intent = new Intent(context, AlarmReceiverAlarm.class);
intent.putExtra(ID, model.id);
intent.putExtra(TIME_HOUR, model.timeHour);
intent.putExtra(TIME_MINUTE, model.timeMinute);
intent.putExtra(TONE, model.alarmTone);
return PendingIntent.getBroadcast(context, (int) model.id, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .