View Full Version : الارم منيجر در اندرويد مارشمالو
reza_web
دوشنبه 09 اسفند 1395, 10:10 صبح
سلام
من چند وقته به شدت به دنبال نمونه كدي هستم كه در آن بتوان در زمانهاي مشخص كاري انجام بده( مثلا يك نوتيفيكيشن ارسال بشه)
براي اندرويد پايين راحت انجام ميشه ولي در اندرويد 6 به علت مديريت بهينه مصرف باطري سيستم عامل نميزاره اين اتفاق بيوفته بهش ميگن DOZE MODE
هزاران كد و سايت و پرسش و پاسخ هم ديدم ولي هرگز كار نكرد
تقريبا هيچ لينك استك پيدا نميشه كه نديده باشم
اگه كسي نمونه كدي كه در اندرويد 6 كار كنه داره من ازش ميخرم(هر قيمتي كه معقول باشه)
reza_web
سه شنبه 10 اسفند 1395, 10:32 صبح
من يك پرسش را در گروههاي تلگرامي و سايتهاي آموزشي اندرويد هم پرسيدم ولي هيچكس جوابي نداشت
بنظر ميرسه هيچكس برنامه اش را روي اندرويد6 تست نكرده كه متوجه اين مشكل شود
بهترين جوابي كه پيدا كردم اينه:
http://stackoverflow.com/a/38302891
كه دو راه حل داده
يكي اينكه از job scheduler استفاده كنيم و ديگري اينكه تكرار در الارم منيجر استفاده نشه و هربار در سرويس موردنظر خودمون دوباره الارم را صدا بزنيم
البته نميدونم چطوري دوباره بايد الارم را صدا زد
rezaricky
سه شنبه 10 اسفند 1395, 11:44 صبح
خب در همون سرویسی که اجرا میشه پس از پایان کارتون دوباره الارم منیجر رو ست می کنید.
یک چیزی شبیه این :
public class SimpleIntentService extends IntentService {
public SimpleIntentService() {
super("SimpleIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
// do your job here
//schedule alarm manager
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int ALARM_TYPE = AlarmManager.RTC_WAKEUP;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
am.setExactAndAllowWhileIdle(ALARM_TYPE, calendar.getTimeInMillis(), pendingIntent);
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
am.setExact(ALARM_TYPE, calendar.getTimeInMillis(), pendingIntent);
else
am.set(ALARM_TYPE, calendar.getTimeInMillis(), pendingIntent);
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.