ویجت صفحه اصلی اندروید- قسمت چهارم: به روزرسانی ویدجت از طریق Service

ویجت صفحه اصلی اندروید- قسمت چهارم: به روزرسانی ویدجت از طریق ServiceReviewed by آریانا on Feb 26Rating: 5.0به روزرسانی ویدجت از طریق Service در برنامه نویسی اندرویدویجت صفحه اصلی اندروید- قسمت چهارم: به روزرسانی ویدجت از طریق Service

واقعیت این است که بیشتر ویدجت هایی  که تا کنون شما روی دستگاهتان مشاهده کرده اید، اطلاعات را به صورت اتوماتیک به روز رسانی می کنند. برای مثال: ویدجت آب و هوا، ویدجت موقعیت و…. . Service در اینجا یک بستری است که داده های ویدجت را تغییر می دهد. با قابلیت به روز رسانی خودکار، ویدجت شما زنده تر و مفیدتر می شود.

در این پست من می خواهم به شما یک ویدجت با قابلیت به روز رسانی را آموزش بدهم  که زمان فعلی را در فرمت HH:mm  نمایش می دهد.

ایجاد یک کلاس Service :

ما زمان کنونی را در دستگاهمان، در این کلاس دریافت خواهیم کرد(با یک زیرکلاس از Service).  متد onStartCommand()  را نادیده بگیرید مثل این:

UpdateService.java

 

همانطور که در کد بالا مشاهده می کنید، به یاد داشته باشید که داده ها (current time) را ، در یک TextView در ویدجت پس از گرفتن زمان ، به روز رسانی کنید.

فایل های XML ویدجت:

مانند دیگر ویدجت ها که در سه قسمت قبلی به آن اشاره شد، شما باید layout ویدجت را ایجاد کنید و در فایل های ویژگی ها را در  XML  قرار دهید. Layout برای ویدجت:

layout\widget_updating.xml

 

و آبجکت AppWidgetProviderInfo  را در یک XML  تعریف کنید مثل زیر:

xml\updating_widget_info.xml

 

کلاس AppWidgetProvider :

Service به صورت خود به خودی شروع نمی شود. ما باید Service را در AppWidgetProvider استارت بزنیم (در این مثال در هر دقیقه).

اما چرا ما فقط از updatePeriodMillis استفاده نمی کنیم؟ اسناد رسمی می گویند که:

اگر دستگاه در حالت اسلیپ یا خواب باشد و آن زمان (که توسط updatePeriodMillis تعریف شده)برای به روزرسانی برسد، دستگاه برای انجام به روزرسانی از حالت خواب خارج می شود. اگر بیشتر از یک بار در ساعت به روزرسانی نشود، احتمالا مشکل قابل توجهی را برای عمر باتری شما ایجاد نمی کند. به هر حال شما باید بیشتر مواقع به روزرسانی را انجام دهید و یا اینکه لازم نیست وقتی وسیله یا دستگاه در حالت خواب قرار دارد،  به روزرسانی را انجام دهید. پس شما می توانید به جای آن، به روزرسانی را بر اساس یک آلارم که دستگاه را از خواب بیدار نمی کند، انجام دهید. بنابراین یک زنگ آلارم را با یک Intent تنظیم کنید که AppWidgetProvider شما را با استفاده از AlarmManager دریافت کند. نوع زنگ آلارم رو روی ELAPSED_REALTIME یا RTC تنظیم کنید که فقط زمانی که وسیله در حالت بیدار قرار دارد آلارم را اجرا می کند. سپس updatePeriodMillis روی “صفر” تنظیم کنید.

در نمونه های قبلی ما از متدهای  getActivity() و getBroadcast() استفاده کردیم، و حالا می خوالهیم از متد getService(): استفاده کنیم:

UpdatingWidget.java

 

حداقل فاصله زمانی ۶۰۰۰۰ میلی ثانیه برای AlarmManager می باشد. اگر شما نیاز به تماس با service خود کمتر از ۶۰ ثانیه با یک alarm manager داشته باشید، لطفا این مبحث را در StackOverflow مطالعه کنید. اما شما باید توجه داشته باشید که این عمل باعث تخلیه باتری می شود و کاربران برنامه شما را حذف می کنند.

اجرای اپلیکیشن:

ویدجت پس از نصب اپلیکیشن ، نصب خواهد شد. آن را روی صفحه اصلی درگ کنید و نتیجه مثل تصویر زیر می شود.

پاسخ دهید