تماس های ورودی و خروجی در اندروید

اولین کار برای اینکه بتونیم به تماس های ورودی و خروجی در اندروید دسترسی داشته باشیم اضافه کردن مجوز دسترسی به تماس ها در فایل AndroidManifest.xml است :

  • ساخت کلاس CallReceiver :

برای دریافت تماس های ورودی و خروجی در اندروید باید یک رسیور تعریف کنیم تا حالت های مختلف تماس رو بتونیم کنترل کنیم . اسم کلاس رو CallReceiver میذارم :

برای اینکه این کلاس رسیور ما بتونه تغییرات رو دریافت کنه باید اون رو به عنوان رسیور در فایل AndroidManifest.xml اضافه کنیم :

دوتا action برای این رسیور تعریف کردیم . این دوتا action مشخص میکنن که این رسیور چه رویدادهایی رو باید دریافت کنه یا بهشون پاسخ بده .

تماس ها در اندروید سه حالت دارند :

  1. در حال زنگ خودرن : Ringing
  2. در حال مکالمه یا جواب دادن تماس : Offhook

البته حالت Offhook برای این موارد هم اتفاق میفته : dialing, active, or on hold, and no calls are ringing or waiting

3.قطع شدن تماس یا رد تماس :Idle

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

تشخیص تماس های خروجی با دریافت تماس های ورودی فرق داره . برای تشخصی تماس های خروجی نیاز به مجوز PROCESS_OUTGOING_CALLS در فایل AndroidManifast.xml داریم که در ابتدای این آموزش این کار رو انجام دادیم . حالا باید ببینیم که چطوری میشه فهمید که تماس خروجی گرفته شده ؟ ینی یوزر خودش با یک شماره تماس گرفته :

از سه حالتی که برای تماس های ورودی گفتم فقط دو حالتش برای تماس خروجی قابل استفاده است و حالت Ringing برای تماس های خروجی کاربرد نداره.

حالا سوال اینجاست که چطوری بفهمیم این دو حالت برای کدوم یکی از تماس هاست ؟ مثلا وقتی حالت Idle اتفاق افتاد ینی تماس قطع شد برای تماس دریافتی بوده یا تماس خروجی ؟!

برای تشخیص این حالت باید دو نوع state تعریف کنیم ، currenState و firstState .

firstState مشخص میکنه که اولین state ی که اتفاق اتفاده چی بوده مثلا تلفن درحال زنگ خوردنه یا اینکه یوزر داره تماس میگیره .

currenState هم حالت های offhook و Idle رو مشخص میکنه .

فقط نکته ای که اینجا وجود داره اینه که برای تماس های خروجی حالت offhook از موقعی که تماس گرفته میشه اتفاق میفته و تفاوت بین جواب دادن تماس خروجی و یا در حال تماس بودن قابل تشخیص نیست .

 

 

به این مطلب چه امتیازی میدهید ؟

اشتراک
باخبر شدن از
guest

11 نظرات
قدیمی ترین
جدیدترین بیشترین امتیاز
Inline Feedbacks
نمایش همه دیدگاه ها
navid

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

فاطمه

خواهش میکنم این مطالب رو به پستتون اضاف کنید
خیلی جالب و خوب نوشتین

1. اگه بخوايم کدی بنویسم که زمان مکالمه رو محاسبه کنه
و زمان رو به شماره تلفن تماس گیرنده یا تماس شونده نسبت داد
2. در آخر آماری از مکالمات با شماره رو داشته باشیم ( جمع زد مکالمات رو)
3. چطور میشه اولین تاریخ تماس و آخرین تاریخ تماس رو برای شماره مورد نظر ثبت کرد
4. و اینکه از مخاطبین نام شماره مورد نظر رو دریافت کرد

سحر

خوب درباره تماس خروجی چی؟چون فرقی بین حالت offhook و ringing نیست نمیشه ازین روش استفاده کرد که

سحر

سپاسگزار که سریع پاسخ دادید.من منظورم pickup کردن گوشی هنگام تماس خروجی بود.هنگامی که تماس خروجی باشه از لحظه ای که تماس شروع به گرفتن میکنه حتی اگه جوابی به تماس داده نشه یعنی گوشی برداشته نشه ، حالت off hook هست.یعنی حالت آف هوک در تماس خروجی به معنی جواب دادن و برقراری مکالمه نیست فقط اینکه یه تماسی برقرار شده رو نشون میده.من خیلی فوری به روشی احتیاج دارم که نشون بده تماسی که گوشی من میگیره پاسخ داده شده.اگه راهی هست یا من جایی اشتباه میکنم ممنون میشم بگید.

موفق باشید

سحر

ممنون که وقت گذاشتید.اگه پیدا کردید که لطف میکنید پست کنید.موفق و پیروز باشید

سحر

سلام.من دوباره مشکل خوردم…بخشید فکر میکنم شما بتونبد کمکم کنید….این مطالبی که اینجا گفتید برای اندروید ۸ و بالاتر کار نمیکنه.بدجور گیر کردم. رانتایم پرمیژن اضافه هم تا حد ممکن میخوام ندم…میتونید کمکم کنید؟