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

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

عزیزی  10 سال پیش  10 سال پیش
0 0

سلام

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

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

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

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

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

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
حمید زمانی  10 سال پیش
0 0

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

 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);
0 0
سلام این خط رو هم اضافه کردم درست نشد قسمت از کد رو در پایین گذاشتم (10 سال پیش)
پاسخ به سوال 
عزیزی  10 سال پیش
0 0

برای نمایش هشدار یه کلاس به نام 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);
+1 0
باید پروژه رو دید ، راه حل های مختلفی داره ، منم یه اپ بستم که یه کاری نزدیک به این می کنه ، باید از دیزاین پترن سینگلتون در این مورد استفاده کنید یعنی فقط یک نمونه از اکتیویتی مورد نظر بسازید و اگر نمونه ای از اون در حال تمایش بود ، اینتنت بعدی رو استارت نکن و منتظر بمونه ، و وقتی کاربر پاسخ داد یا کنسل کرد چک کن ببین چیزی تو صف برای نمایش داری یا نه (10 سال پیش)

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