دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۱
  • آبان

جلسه ۱۱ : Intent و فیلتر در اندروید

  • دسته‌بندی‌ها :
جلسه ۱۱ : Intent و فیلتر در اندروید
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش برنامه نویسی اندروید را دنبال می کنند. Intent در اندروید یک نوع فعالیت انتراعی است که با استفاده از متد startActivity می تواند یک نوع فعالیت broadcastIntent را راه اندازی کرده و آن را به هر کدام از اجزای Broadcast Receiver ها در بخش های قبلی که به آن اشاره شده ارسال کند. همچنین (startService(Intent نیز با سرویس در حال اجرا در پس زمینه ی برنامه ارتباط برقرار می کند. برای آنایی بیشتر با Intent و فیلتر در اندروید و چگونگی استفاده از آن در ادامه ی مباحث با ما همراه باشید.

      intent filter چیست ؟

      در ادامه ی مبحث Intent و فیلتر در اندروید با ساختار و تعریف Intent ، انواع آن و مثال هایی از آن آشنا خواهید شد.

      برای درک بهتر عملکرد Intent به مثال زیر توجه کنید:

      فرض کنید که فعالیتی دارید که باید یک سرویس ایمیل را راه اندازی کرده و با استفاده از دستگاه اندروید ایمیل ارسال شود.

      برای این منظور، Activity شما یک ACTION_SEND همراه با chooser (انتخابگر) را به Android Intent Resolver ارسال می کند.

      chooser مشخص می کند که کاربر می تواند نحوه ارسال اطلاعات ایمیل خود را انتخاب کند:

      مثال : 

      دستور بالا از متد startActivity برای شروع یک فعالیت ایمیل استفاده کرده و نتیجه بصورت زیر خواهد بود:

      آشنایی با Intent و فیلتر در اندروید

      آشنایی با Intent و فیلتر در اندروید

      به عنوان مثال، فرض کنید که یک فعالیت دارید که باید URL را در یک مرورگر وب بر روی دستگاه Android خود باز کند.

      برای این منظور، فعالیت شما به Android Resolver Intent ارسال خواهد کرد تا آدرس داده شده را در مرورگر وب باز کند.

      Resolver Intent توسط لیست فعالیت ها تجزیه می شود و فعالیتی که بهترین نتیجه را برای شما بدهد را انتخاب می کند.

      Resolver Intent سپس صفحه وب شما را به مرورگر وب منتقل می کند و فعالیت مرورگر وب را آغاز می کند.

      مثال : 

      مثال فوق PVLEARN را در موتور جستجوی اندروید جستجو کرده و نتیجه ی فعالیت PVLEARN را بازمی گرداند.

      متدهای مختلفی برای ارائه ی Intent به یک فعالیت ، سرویس و یا broadcast receiver وجود دارد:

      ردیفمتد و توضیحات مربوطه
      ۱Context.startActivity()

      آبجکت Intent به این متد برای راه اندازی فعالیت جدید یا اجرای هدفی در فعالیت فعلی ارسال می شود.

       

      ۲Context.startService()

      آبجکت Intent به این متد برای شروع خدمات و یا ارائه ی دستورالعمل جدید به سرویس منتقل می شود.

       

      ۳Context.sendBroadcast()

      آبجکت Intent به این متد برای ارسال پیام به broadcast receiver ارسال می شود.

      آبجکت های Intent

      یک آبجکت Intent در واقع بسته ای از اطلاعات مورد نیاز مورادی که قصد دریافت آن را دارند می باشد.

      همچنین این شیء حاوی اطلاعات مورد استفاده ی سیستم اندروید می باشد.

      یک شیء Intent معمولا شامل اجزای زیر است:

      action (عمل)

      این یکی از اجزای ضروری آبجکت Intent است و به عنوان رشته ای که یک عمل را انجام می دهد شناخته می شود.

      action تا حد زیادی تعیین کننده ی سایر بخش های آبجکت Intent است.

      action در یک شیء Intent را می توان با متد () setAction تنظیم کرده و آن را با استفاده از متد () getAction فراخوانی کرد.

      data (داده)

      مشخصات یک داده را به یک فیلتر intent اضافه می کند.

      مشخصات می تواند شامل فقط نوع داده ، فقط نوع URI و یا هر دوی آن ها باشد.

      URI با استفاده از صفات مشخصی برای هر کدام از بخش ها تعریف شده است.

      موراد زیر ویژگی های اختیاری هستند که فرمت URI را تعیین می کنند اما با هم وابستگی متقابل دارند:

      • اگر یک طرح برای فیلتر دلخواه مشخص نشده باشد، تمام صفات URI دیگر نادیده گرفته می شود.
      • اگر یک میزبان برای فیلتر مشخص نشده باشد، ویژگی پورت و تمام ویژگی های مسیر نادیده گرفته می شوند.

      متد ()setData اطلاعات را تنها به عنوان یک URI مشخص می کند.

      ()setType آن را فقط به عنوان یک نوع MIME مشخص کرده و ()setDataAndType آن را به عنوان یک URI و یک نوع MIME مشخص می کند.

      URI توسط ()getData و نوع ()getType فرخوانی می کند.

      مثال هایی از نمونه های action/data :

      ردیفAction/Data و توضیحات آن
      ۱ACTION_VIEW content://contacts/people/1

      نمایش اطلاعات مربوط به فردی که شناسه آن “۱” است.

      ۲ACTION_DIAL content://contacts/people/1

      شماره گیر تلفن را با مشخصات نمایش می دهد.

       

      ۳ACTION_VIEW tel:123

      شماره گیر تلفن را با شماره داده شده پر می کند.

       

      ۴ACTION_DIAL tel:123

      شماره گیر تلفن را با شماره داده شده پر می کند.

      ۵ACTION_EDIT content://contacts/people/1

      اطلاعات مربوط به فردی که شناسه آن “۱” است را ویرایش کنید.

      ۶ACTION_VIEW content://contacts/people/

      نمایش لیستی از افراد که کاربر می تواند از آن ها را مرور کند.

       

      ۷ACTION_SET_WALLPAPER

      تنظیمات را برای انتخاب تصویر زمینه نمایش می دهد.

       

      ۸ACTION_SYNC

      مقدار کنونی android.intent.action.SYNC است.

       

      ۹ACTION_SYSTEM_TUTORIAL

      این آموزش مبتنی بر پلت فرم را آغاز می کند.

       

      ۱۰ACTION_TIMEZONE_CHANGED

      منطقه زمانی تغییر می کند

      ۱۱ACTION_UNINSTALL_PACKAGE

      برای اجرای uninstaller پیش فرض است.

      دسته ها

      متد () addCategory یک دسته را در یک شی Intent قرار می دهد.

      متد () RemoveCategory  یک دسته از قبلا اضافه شده را حذف می کند.

      متد () getCategories نیز مجموعه ای از تمام دسته های حاضر در شی را برمی گرداند.

      extras (موارد اضافی)

      با استفاده از متدهای ()putExtras و ()getExtras ، می توان موارد اضافی را تعیین و کرده و فرخوانی کرد.

      flags (پرچم ها)

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

      ردیفFlags و توضیحات
      ۱FLAG_ACTIVITY_CLEAR_TASK

      اگر مجموعه ای در Intent به متد () Context.startActivity منتقل شود این flag فعالیت جاری را به فعالیت های قبل مرتبط می کند.

      ۲FLAG_ACTIVITY_CLEAR_TOP

      این flag به جای ایجاد یک فعالیت دیگر در بالای سایر فعالیت ها ، فعالیت های قبلی را می بندد.

       

      ۳FLAG_ACTIVITY_NEW_TASK

      این flage توسط فعالیتهایی که می خواهند یک launcher را ارائه دهند استفاده می شود.

      Component Name (نام بخش)

      ComponentName یک فیلد اختیاری اندروید است که از کلاس های Service یا BroadcastReceiver مشتق می شود.

      اگر این فیلد تنظیم شود آبجکت Intent را به کلاس تعیین شده ارسال می کند، درغیر این صورت اندروید با استفاده از سایر اطلاعات عملی دیگری را انتخاب می کند.

      فیلد ComponentName توسط متدهای ()setComponent(), setClass یا ()setClassName تنظیم شده و با استفاده از متد () getComponent فراخوانی می شود.

      انواع Intent

      دو نوع Intent پشتیبانی شده توسط Android وجود دارد:

      Intent و فیلتر در اندروید

      Intent و فیلتر در اندروید

      Explicit Intents

      Explicit intent برای اتصالات داخلی یک اپلیکیشن استفاده می شود.

      به عنوان مثال برای اتصال یک activity به activity دیگر می توانید از Explicit intent استفاده کنید.

      تصویر زیر برنامه ای را نشان می دهد که با کلیک روی یک دکمه activity اول را به activity دوم متصل می کند:

      Intent و فیلتر در اندروید - مثال

      Intent و فیلتر در اندروید
      – مثال

      این intent ها هدف اجزاء را همراه با نام آن ها مشخص می کند و معمولا برای پیام های کاربردی داخلی استفاده می شود.

      مثال:

      مثال : 

      Implicit Intents

      این intent ها مقدار فیلد component name را تنظیم نکرده و آن را خالی رها می کند.

      Implicit intent اغلب برای فعال کردن اجزاء در برنامه های دیگر به کار می رود.

      برای مثال:

      مثال : 

      کد فوق نتیجه ای مشابه زیر را تحویل خواهد داد:

      Intent در اندروید

      Intent در اندروید

      target component که intent را دریافت می کند، می تواند از متد ()getExtras برای دریافت اطلاعات اضافی ارسال شده به منبع استفاده کند.

      برای مثال:

      مثال : 

      مثال

      مثال زیر چگونگی استفاده از intent برای راه اندازی برنامه های مختلف ساخته شده در اندروید را نشان می دهد:

      مراحلتوضیحات
      ۱مراحل ایجاد برنامه در اندروید استدیو را طبق بخش های قبلی دنبال کرده و نام پکیج را com.pvlearn.pvlearn.myapplication قرار بدهید.
      ۲محتوای فایل  src / main / java / MainActivity.java را برای کد تعریف دو دکمه ی  Start Browser و  Start Phone تغییر دهید.
      ۳محتوای فایل res / layout / activity_main.xml را نیز برای افزودن سه دکمه در طرح خطی تغییر دهید.
      ۴برنامه را اجرا کنید تا شبیه ساز آندروید را راه اندازی کنید و نتیجه تغییرات انجام شده در برنامه را تأیید کنید.

      کد زیر حاوی محتوای دستکاری شده ی فایل src/com.example.My Application/MainActivity.java. است:

      مثال : 

      کد زیر نیز محتوای فایل res/layout/activity_main.xml خواهد بود:

      مثال : 

      کد زیر نیز محتوای فایل res/values/strings.xml برای تعریف ثابت هاست:

      مثال : 

      کد زیر نیز محتوای پیش فرض فایل AndroidManifest.xml است:

      مثال : 

      اجرای برنامه

      برای اجرای برنامه ی اندرویدی خود یکی از فایل های activity در برنامه ی خود کلیک کنید.

      سپس روی نماد  (Run) از نوار ابزار برای شروع اجرای برنامه کلیک کنید.

      اگر همه چیز بخوبی پیش برود شبیه ساز اندروید پنجره ی زیر را نمایش خواهد داد:

      Intent در اندروید -تست

      Intent در اندروید -تست

      حالا روی دکمه ی Start Browser کلیک کنید، سپس مرورگر باز شده و آدرس http://www.example.com را نمایش می دهد:

      نمایش مرورگر

      و همینطور می توانید رابط تلفن را با استفاده از دکمه Start Phone راه اندازی کنید که به شما امکان می دهد شماره تلفن داده شده را شماره گیری کنید.

      فیلترهای Intent

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

      توجه داشته باشید که  باید از عنصر <intent-filter> در فایل manifest برای لیست کردن action ، دسته ها و انواع داده مرتبط با هر فعالیت، service یا broadcast receiver استفاده کنید.

      کد زیر نمونه ای از فایل AndroidManifest.xml را برای مشخص کردن یک فعالیت com.example.My Application.CustomActivity را نشان می دهد.

      مثال : 

      هنگامی که این فعالیت با فیلترهای فوق تعریف می شود. فعالیت های دیگر قادر به فراخوانی این فعالیت هستند.

      فراخوانی فعالیت با استفاده از فعالیت های دیگر توسط orroid.intent.action.VIEW می باشد.

      عنصر <data> نوع داده ای را که انتظار می رود توسط فعالیت مورد نظر فراخوانی می شود را مشخص می کند.

      قبل از اعلام یک فعالیت موارد زیر را دنبال کنید:

      • فیلتر <intent-filter> ممکن است بیش از یک عمل را نشان دهد، همانطور که در بالا نشان داده شده است.

      اما این لیست نمی تواند خالی باشد یک فیلتر باید حاوی حداقل یک عنصر <action> باشد.

      • فیلتر <intent-filter> ممکن است صفر، یک یا چند دسته را فهرست کند، اگر دسته بندی مشخص نشده باشد اندروید این نوع را منتقل می کند.
      • هر عنصر <data> می تواند یک URI و یک نوع داده (نوع رسانه MIME) را مشخص کند.

      صفات جداگانه مانند طرح، میزبان، پورت و مسیر برای هر بخشی از URI وجود دارد.

      مثال

      مثال زیر در واقع تغیر یافته ی مثال فوق است، در این مثال تصمیم گیری اندروید وقتیکه یک intent به دو فعالیت متصل است را نشان می دهد:

      مرحلتوضیحات
      ۱مراحل ایجاد برنامه در اندروید استدیو را طبق بخش های قبلی دنبال کرده و نام پکیج را com.pvlearn.pvlearn.myapplication قرار بدهید.
      ۲محتوای فایل src / Main / Java / MainActivity.java را تغییر داده و کد مربوطه به تعریف سه دکمه در طراحی را لحاظ کنید.
      ۳فایل  src / Main / Java / CustomActivity.java را برای ایجاد فعالیت سفارشی ایجاد کنید.
      ۴محتوای فایل res / layout / activity_main.xml را برای افزودن سه دکمه در طرح خطی تغییر دهید.
      ۵فایل res / layout / custom_view.xml را برای افزودن یک <TextView> ساده جهت نشان دادن داده های منتقل شده از مقصد اضافه کنید.
      ۶به محتوای فایل AndroidManifest.xml  تگ <intent-filter> را برای تعریف قوانین intent تعریف کنید.
      ۷برنامه را اجرا کنید تا شبیه ساز آندروید را راه اندازی کنید و نتیجه تغییرات انجام شده در برنامه را تأیید کنید.

      کد زیر نیز حاوی محتوای فایل src/MainActivity.java. می باشد:

      مثال : 

      کد زیر نیز محتوای فایل src/com.example.My Application/CustomActivity.java. را نشان می دهد:

      مثال : 

      کد زیر نیز شامل محتوای فایل res/layout/activity_main.xml می باشد:

      مثال : 

      کد زیر نیز حاوی محتوای فایل res/layout/custom_view.xml می باشد:

      مثال : 

      کد محتوای فایل res/values/strings.xml :

      مثال : 

      کد زیر محتوای پیش فرض فایل AndroidManifest.xml می باشد:

      مثال : 

      اجرای برنامه

      برای اجرای برنامه ی اندرویدی خود یکی از فایل های activity در برنامه ی خود کلیک کنید.

      سپس روی نماد  (Run) از نوار ابزار برای شروع اجرای برنامه کلیک کنید.

      اگر همه چیز بخوبی پیش برود شبیه ساز اندروید پنجره ی زیر را نمایش خواهد داد:

      آشنایی با Intent و فیلتر در اندروید -تست

      آشنایی با Intent و فیلتر در اندروید -تست

      حالا با کلیک روی دکمه ی “Start Browser with VIEW Action” شروع کنیم.

      در اینجا فعالیت سفارشی ما با فیلتر “android.intent.action.VIEW” تعریف شده است.

      در حال حاضر یک فعالیت پیش فرض در برابر عملکرد VIEW تعریف شده توسط آندروید است که آن راه اندازی مرورگر وب است.

      بنابراین اندروید دو گزینه را برای انتخاب activity شما نمایش می دهد.

      Intent در اندروید -تست 1

      Intent در اندروید -تست ۱

      حالا اگر Browser را انتخاب کنید، آندروید مرورگر وب را باز کرده و وبسایت example.com را باز خواهد کرد.

      اما اگر گزینه IndentDemo را انتخاب کنید، آندروید CustomActivity را راه اندازی خواهد کرد.

      باز کردن مرورگر

      حالا با کلیک روی دکمه ی back به عقب برگشته و اینبار روی “Start Browser with LAUNCH Action” کلیک کنید.

      در اینجا اندروید فیلتری را برای تعریف activity اعمال می کند و به سادگی می توان فعالیت سفارشی خود را راه اندازی کنید.

      دوباره روی دکمه ی back برای بازگشت کلیک کرده و اینبار روی “Exception Condition” کلیک کنید.

      در این بخش اندروید سعی می کند که یک فیلتر معتبر برای درخواست مورد نظر اعمال کند.

      از آن جایی که ما از  https به جای http استفاده می کنیم فیلتر معتبری تعریف نشده و اندروید یک خطا صادر می کند.

      Intent در اندروید -خطا

      Intent در اندروید -خطا

      کلام آخر

      با استفاده از قابلیت  Intent و فیلتر در اندروید شما می توانید از یک فعالیت به فعالیت دیگری مراجعه کنید ضمن اینکه فعالیت قبلی خود را نیز حفظ کرده و امکان بازگشت به فعالیت های قبل را دارید، در فصل بعدی به مباحث طراحی رابط کاربری می پردازیم.

      QR:  جلسه ۱۱ : Intent و فیلتر در اندروید
      به اشتراک بگذارید