بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل در اجرای دوباره alarmManager

مدیریت گفتگو
عزیزی 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام

برنامه ای دارم که زمان های مورد نظر را می گیرد و در موعد مقرر هشدار های لازم را می دهد

در برنامه وقتی به زمان مورد نظر می رسد یک اکتیویتی اجرا شده و هشدار ساعت مورد نظر با پیغام مورد نظر را در دیالوگی می دهد اگر کاربر کلید ok را نزند مثلا خواب باشد دیالوگ باز شده بسته نمی شود یعنی اکتیوتی همچنان در حال اجرا می ماند و اگر مثلا یک دقیقه دیگر هشدار دیگه ای قرار باشد اجرا شود چون اکتیویتی برای هشدار قبلی باز مونده برای اجرای هشدار بعدی به مشکل می خورد

نمی دانم از چه راه حلی مشکل را حل کنم مثلا می شود در حالی که اکتیویتی باز است یه نمونه دیگه ای دوباره باز کرد

یا با استفاده از flag های همراه intent می شه مشکل رو حل کرد

منتظر راهنمایی دوستان هستم با تشکر

نظرات

پاسخ‌ها 2

حمید زمانی 11 سال پیش

من نمی دونم کدت چیه ، بهتر بود کدت رو داخل سوالت می ذاشتی اما حدس می زنم با استفاده از کد زیر مشکلی پیش نیاد :

 Intent intent = new Intent(context, AvtivityMain.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Application.context.startActivity(intent);

نکته اصلی این کد این خطه :

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

نظرات

عزیزی 11 سال پیش
سلام این خط رو هم اضافه کردم درست نشد قسمت از کد رو در پایین گذاشتم
عزیزی 11 سال پیش

برای نمایش هشدار یه کلاس به نام AlarmDialog تعریف کردم که extends شده از activity و setContentView براش نذاشتم بلکه از داخلش یه دیالوگ نمایش داده می شود یعنی هر بار که این کلاس فراخوانده می شود با توجه به مقادیر دریافت کرده دیالوگ هشدار مقدار گرفته و  نمایش می دهد نحوه صدا زدن این کلاس در کلاس ActivityMain به صورت زیر است

مشکلم اینه که اگر یکی از هشدارها به هر دلیل پاسخ داده نشود مثلا طرف خواب باشد هشدار بعدی که می خواهد نمایش داده شود چون هشدار قبلی بسته نشده است نمایش داده نمی شود

 Intent intent = new Intent(ActivityMain.this, AlarmDialog.class);
intent.putExtra("list", list);
intent.putExtra("nameP", nameP);
intent.putExtra("fullTime", fullTime);

PendingIntent operation;
operation = PendingIntent.getActivity(getBaseContext(), i, intent, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager am;
am
.setRepeating(AlarmManager.RTC_WAKEUP, alarmStart,24*60*60*1000, operation);

نظرات

حمید زمانی 11 سال پیش
باید پروژه رو دید ، راه حل های مختلفی داره ، منم یه اپ بستم که یه کاری نزدیک به این می کنه ، باید از دیزاین پترن سینگلتون در این مورد استفاده کنید یعنی فقط یک نمونه از اکتیویتی مورد نظر بسازید و اگر نمونه ای از اون در حال تمایش بود ، اینتنت بعدی رو استارت نکن و منتظر بمونه ، و وقتی کاربر پاسخ داد یا کنسل کرد چک کن ببین چیزی تو صف برای نمایش داری یا نه

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