سلام ... من یه الارم منیجر دارم که مثلا قراره 1 ساعت دیگه نمایش داده بشه ... در صورتی که حافظه رم پاک بشه دیگه بسته می شه و کار نمی کنه ... کلی توی نت گشتم ولی چیزی که کار کنه رو پیدا نکردم ...
راهی هست که جلو این کار گرفته بشه و حتی با پاک کردن کش حافظه هم الارم ها نشون داده بشه ...
البته این مشکل رو واسه برودکست و سرویس ها هم داشتم ... و توی چندجا پرسیدم کسی جواب نداد ...
تنها چیزی که بهش رسیدم این بود که باید سرویس و ... به صورت فورگراند در بیارم که اونم اموزش خاصی واسش پیدا نکردم ...
باید برودکست رسیور رو توی مانیفست معرفی کنید و مجوز Boot Receiver بهش بدین:
<receiver android:name="utilities.MyBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
مجوز:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
حالا توی متد onReceive از رسیور خودتون همون کدی رو بنویسین که توی اکتیویتی گذاشتین تا آلارممنیجر موقع ریبوت گوشی دوباره سرویس شما رو اجرا کنه. مثال:
public class MyBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent notificationService = new Intent(context, NotificationService.class);
notificationService.putExtra("notify", "myNotificationService");
PendingIntent pi = PendingIntent.getService(context, 0, notificationService, PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 900000, pi);
}
}
دقت کنید آلارممنیجر هیچوقت بسته نمیشه و اون سرویس شماست که بسته میشه و با این کد به آلارممنیجر میگیم دوباره اجراش کنه.
ممنون که جواب دادین ...
من این الارم رو ایجاد می کنم .... با این حساب باید هر 60 ثانیه یک بار اکتیوتی اجرا بشه ... ولی وقتی رم رو پاک می کنم کلا از کار می افته
AlarmManager am = (AlarmManager) App.context.getSystemService(Context.ALARM_SERVICE);
Intent sservice = new Intent(App.context, AlarmActivity.class);
notificationService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pserv = PendingIntent.getActivities(App.context,0, new Intent[]{sservice},PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, pserv);
حدود دو ماهه این مشکل رو نتونستم حل کنم ...
وقتی یه الارم منیجر ایجاد میشه چ برنامه ما باشه و چ نباشه اون کارشون می کنه ؟؟؟ حالا اگه نتونه سرویس ما رو رن کنه مشکل از چیه ؟؟؟
(31-05-1395، 09:43 ب.ظ)masiha68 نوشته: [ -> ]سلام ... من یه الارم منیجر دارم که مثلا قراره 1 ساعت دیگه نمایش داده بشه ... در صورتی که حافظه رم پاک بشه دیگه بسته می شه و کار نمی کنه ... کلی توی نت گشتم ولی چیزی که کار کنه رو پیدا نکردم ...
راهی هست که جلو این کار گرفته بشه و حتی با پاک کردن کش حافظه هم الارم ها نشون داده بشه ...
البته این مشکل رو واسه برودکست و سرویس ها هم داشتم ... و توی چندجا پرسیدم کسی جواب نداد ...
تنها چیزی که بهش رسیدم این بود که باید سرویس و ... به صورت فورگراند در بیارم که اونم اموزش خاصی واسش پیدا نکردم ...
یه سری از گوشی ها مثل هواوی یه برنامه مدیریت باتری روشون نصبه که برای کاهش مصرف باتری، بعد از لاک شدن گوشی برنامه های باز رو میبنده، البته از خود برنامه میتونی برنامه هایی که نمیخوایین بسته بشن رو انتخاب کنید
احتمالا مشکل شما هم از این باشه
فک نکنم مشکل از اون باشه چون فیس بوک هم رو گوشیم نصبه ولی بازم کارشو می کنه و الارم ها رو نشون میده
فیسبوک داره از Push Notification استفاده میکنه (با کمک سرویس GCM گوگل).
(12-06-1395، 11:22 ب.ظ)masiha68 نوشته: [ -> ]فک نکنم مشکل از اون باشه چون فیس بوک هم رو گوشیم نصبه ولی بازم کارشو می کنه و الارم ها رو نشون میده
خب یکسری از برنامه های معروف مثل همین فیسبوک به صورت دیفالت از بسته شدن محافظت میشن
شما الان برنامه خودتون رو protect کردین که ببینید جواب میده یا نه؟
(13-06-1395، 08:12 ق.ظ)ADMIN نوشته: [ -> ]فیسبوک داره از Push Notification استفاده میکنه (با کمک سرویس GCM گوگل).
مهندس اگه امکانش باشه یه اموزش در این مورد بزارین ...یه سرویس که هیچوقت کنسل یا غیر فعال نمیشه ...
واقعا چند ماهه درگیر این قضیه ام هنوز به جواب نرسیدم ...
من با همون روشی که خدمتتون نوشتم دارم کار میکنم و حتی اگه گوشی Restart هم بشه دوباره سرویس اجرا میشه. هیچ مشکلی نداشتم تا حالا ولی اگه بخواین بطور کلی جواب بده باید با GCM و همون روش Push Notification کار کنید. ویژگی GCM یا همون Google Cloud Messaging اینه که همیشه سرویسهای گوگلپلی در پسزمینه درحال اجرا هستن و گوشی اونها رو نمیبنده و درنتیجه وقتی پیام بیاد دریافت میکنن و نوتیفیکیشن رو نشون میدن. اینطوری لازم نیست سرویس برنامه شما همیشه در پسزمینه درحال اجرا باشه و حافظه و باتری گوشی رو مصرف کنه. البته بخاطر تحریمها یکم استفاده ازش دردسر داره ولی غیرممکن نیست.
میدونم وقت ندارین و سرتون شلوغه ولی واقعا به این کد نیاز دارم
اگه بتونین اون رو در قالب یه پروژه کوچیک بنویسید ممنون میشم
البته میدونم بحث هزینه وسط نیست ولی خب اگه هزینه رو در نظر بگیرد حاضر به پرداختش هستم
من خودم هر کاری می کنم اخر سر میبینم که سرویس دوباره اجرا نمیشه
موضوع واقعاً وقت نداشتن یا هزینه نیست. بحث اینه که من با همین روشی که گفتم دارم جواب میگیرم و روش دیگری به ذهنم نمیرسه. بهرحال شما یا باید با سرویس و آلارممنیجر کار کنید و یا با Push Notification و در هر دو مورد هم آموزش توی اینترنت زیاده.
ممنون میشم اگه وقت کردین این کد رو بنویسید
هیچ تاپی توی سایت های ایرانی و خارجی نیست که اون رو نخونده باشم ولی هیچکدوم کار نکردن ...
حتی چند بار توی استک اورفلو و سایت شما و چند سایت دیگه هم این قضیه رو مطرح کردم ولی کارم راه نیفتاد
به هر حال بازم اگه امکانش هست این کد رو بنویسد و اگرم نه که ...
سعی میکنم یه آموزش حداقل بصورت متنی درست کنم که مرحله به مرحله توضیه داده باشه این قضیه رو.