۱۳۸۸ خرداد ۱۰, یکشنبه

اولین Widget من برای Android

می‌دونم، می‌دونم، باور کنید که خودم می‌دونم. ما ایرانیها هروقت که یک پلتفرم جدید برای برنامه‌نوشتن یا ویجت‌نوشتن پیدا می‌کنیم، اولین کاری که می‌کنیم نوشتن یک برنامه تقویم جلالی (هجری شمسی) هست. باور کنید منم به اندازه شما از این واقعیت ناراحتم و حتی بدم میاد، اما خوب چه‌کار میشه کرد؟ بعد از نوشتن "!Hello, World" ساده‌ترین کاریه که میشه کرد (و از حق هم که نگذریم یکم به درد بخوره). به‌هرحال من اولین Widget رو برای Android نوشتم، هرچند که از خیلی قبل از این روی یه پروژه دیگه کار می‌کردم، اما خوب اون هنوز آماده نشده.

این ویجت خیلی سادست، فقط تاریخ امروز رو نشون میده، همین! و ذکر این نکته که این ویجت فقط برای اندروید ۱.۵ هست هم ضروری به نظر میرسه.

هرچند که این پروژه خیلی ساده‌ایی بود، اما خوب یکم هم بحث فنی در موردش شاید بد نباشه.

مهمترین تفاوتی که برنامه‌هایی که روی موبایلها اجرا می‌شوند با برنامه‌های عادی دسکتاپ در کمبود منابع سیستمی و از اون مهمتر عمر کم باتری آنهاست، پس یکی از مهمترین دغدغه‌های یک برنامه‌نویس برنامه‌هایی که قرار برروی این نوع دیوایسها اجرا بشند، حداقل استفاده از منابع هست.

در چارچوب AppWidget اندروید شما می‌توانید خیلی ساده یک وقفه مشخص کنید و پس از آن اندروید به‌طور مرتب در آن بازه‌های زمانی ویجت را به‌روز می‌کند، برای ویجتی مثل این خیلی ساده یک برنامه‌نویس بی‌وجدان! می‌تونست بازه‌های زمانی ۱ثانیه را مشخص کند و اصلا دغدغه اینکه ممکنه کاربر روز/ساعت/منطقه‌زمانی رو تغییر بده و یا حتی اینکه کی ساعت ۰۰:۰۰ میشه و روز بعد فرا‌ می‌رسد را نداشته باشد. اما خوب با توجه به میزان اندک وجدانی که من دارم این برنامه یکم بهتر کار می‌کنه. این ویجت یک BroadcastReceiver داره که به تغییراتی که ممکنه کاربر در تنظیمات دستگاهش بده گوش می‌کنه و در مواقع نیاز تمام ویجتهای نصب شده را به‌روز می‌کند. همچنین یک AlarmManager هم برای این ویجت پیش‌بینی شده که در صورتی که تاریخ خود دستگاه عوض شد (ساعت ۰۰:۰۰) تمام ویجتها را به‌روز می‌کنه.

با توجه به بحث همیشگی و تکراری تحریم و ... نمیشه که این برنامه رو به Android Market اضافه کرد (حتی اگر هم که می‌تونستم، کسی نمی‌تونست از Android Market نصبش کنه ;)) اگر کسی علاقه‌منده که نصبش کنه می‌تونه از اینجا بارگذاری کنه.

نکته: از یکی مثل من (با توجه به باورها و عقاید) منتشر نکردن کد یکم بعیده، اما مطمئنا کدش رو (هرچند که خیلی سادست) به زودی ریلیز می‌کنم، مشکل اینه که فکر می‌کنم یه مشکل لایسنس کوچیک وجود داره که تا رفع نشده بهتره که کد ریلیز نشه.