آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کار نکردن آلارم منیجر برای زمان های بزرگ

mortex  10 سال پیش  9 سال پیش
+2 0

سلام من دارم از آلارم منیجیر برای انجام یک کار در دوره زمانی مشخص (روزانه، هفتگی و ماهانه استفاده می کنم)

وقتی با استفاده از کد زیر برای زمانهای کوتاه مثل 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); } }

 

0 0
atf ممنون لطفا کمی توضیح بده یعنی اگه بجای alarmDate.getTimeInMillis همون 24*60*60*1000 رو وارد کنیم روزانه عمل میکنه؟ (10 سال پیش)
0 0
alarmDate.getTimeInMillis() - 15 بجای این هرچی دوست داشتی بذار (10 سال پیش)
0 0
atf جان در کد شما پارامترهای pIntent و alarmDate باید به چه صورتی مقداردهی بشند؟ (10 سال پیش)
پاسخ به سوال 
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);
}

}

 

 

0 0
میشه کد کلاس های AlarmDBHelper و AlarmModel رو هم بذاری؟ (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .