رفتن به مطلب

کتابخانه PNBroadcastReceiver - دریافت رویدادهای دستگاه اندروید با قابلیت استخراج اطلاعات اکشنها


پژمان نیکروان

ارسال‌های توصیه شده

بسم الله الرحمن الرحیم

سلام

 

BroadcastReceiver اصلا چیه؟

 

چرا به جای BroadcastReceiver خود بیسیک از PNBroadcastReceiver استفاده کنیم؟

 

با برادکست رسیور چه کارایی میشه انجام داد؟

 

آیا فقط میشه به رویدادهای مختلف موبایل گوش داد یا میشه اطلاعاتی هم ازشون گرفت؟

 

چه رویداد هایی داریم تو اندروید؟ از کجا پیداشون کنیم؟

 

همه ی اینها و آموزش استفاده از PNBroadcastReceiver در فیلم آموزشی 5دقیقه ای با حجم 9مگ توضیح داده شده.

 

کنار این فیلم دو سورس قرار گرفته که با استفاده از یکیش میتونیم به روشن یا خاموش شدن صفحه نمایش گوش بدیم ، وقتی صفحه روشن شد در لاگ چاپ میشه صفحه روشن شد و وقتی خاموش شد هم بالعکس...

و در سورس دوم اطلاعات باتری گرفته شده ، مثلا زمانی که به شارژر متصل یا قطع شد Toast داده میشه و یا میشه فهمید که شارژر USB هست یا با پریز برق. و همچنین درصد شارژ گوشی بعد از کم شدن شارژ نمایش داده میشه با Toast...

*برادکست رسیور تنها برای اینکار نیست بلکه میتونید به رویدادهای دیگه مثل وصل یا قطع شدن هدست ، زنگ خوردن گوشی و....... گوش بدید و کاری رو انجام بدید*

 

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

دانلود کتابخانه PNBroadcastReceiver

 

دانلود فیلم آموزشی و دو سورس

 

امیدوارم خوشتون بیاد و راضی باشید ، اگه سوالی پیش اومد بپرسید. :53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • پاسخ 48
  • ایجاد شده
  • آخرین پاسخ

بالاخره :give_rose:

با این میشه در مورد otg هم اطلاعاتی نوشت و به پورت یو اس بی گوش کرد؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بالاخره :give_rose:

با این میشه در مورد otg هم اطلاعاتی نوشت و به پورت یو اس بی گوش کرد؟

فدا :53:

نه متاسفانه نمیشه و فکر نکنم بشه با otg ارتباط برقرار کرد چون اصلا برادکست با اینتنت ارسال میکنه اکشن رو.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

@@پژمان نیکروان, پژمان جان اون فایل متنی که اکشن ها داخلش بود رو قرار میدی تو فایلاتو دیدم نبود؟ :give_rose:

و اگر میشه یه توضیح کوچیک در مورد اکشن ها

لینک ارسال
به اشتراک گذاری در سایت های دیگر

@@پژمان نیکروان, پژمان جان اون فایل متنی که اکشن ها داخلش بود رو قرار میدی تو فایلاتو دیدم نبود؟ :give_rose:

و اگر میشه یه توضیح کوچیک در مورد اکشن ها

بفرمااا...

http://s6.picofile.com/file/8244954134/broadcast_actions.zip.html

هرکدوم بصورت انگلیسی جوری نوشته که آدم متوجه میشه مثلا:

android.intent.action.CAMERA_BUTTON | روی دکمه عکس گرفتن دوربین کلیک شد

android.intent.action.DOWNLOAD_COMPLETE | دانلود توسط دانلود منیجر پیشفرض گوشی به اتمام رسید

android.intent.action.PACKAGE_CHANGED | یک برنامه جایگزین شد با نسخه قبلیش ، که اطلاعاتش رو اگه استخراج کنید پکیج نیم و... هم میده

android.app.action.ACTION_PASSWORD_CHANGED | قفل دستگاه عوض شد

همشون تقریبا اینجوری ان و میشه فهمید که در مورد چی هست.

اینجا هم لیست اکشن های برادکست رو میتونید ببینید:

http://stackoverflow.com/questions/4031740/where-is-the-all-android-broadcast-intent-list

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 2 ماه بعد...

اینتنت مربوط به تماس های دریافتی رو میخوام؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

درسته این کتابخونه کارایی های خیلی زیادی داره ولی یکسری ازی این ها توی کتابخونه phone event  وجود داره مثل خاموش و روشن شدن صفحه کم شدن حجم کارت حافظه مقدار شارژ باطری یا کم شدن شارژ باطری و ....

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اینتنت مربوط به تماس های دریافتی رو میخوام؟

سلام، اینتنت:

android.intent.action.PHONE_STATE

به این دسترسی هم نیاز هست:

android.permission.READ_PHONE_STATE

درسته این کتابخونه کارایی های خیلی زیادی داره ولی یکسری ازی این ها توی کتابخونه phone event  وجود داره مثل خاموش و روشن شدن صفحه کم شدن حجم کارت حافظه مقدار شارژ باطری یا کم شدن شارژ باطری و ....

سلام، شما درست میگید کلاس PhoneEvents بعضی از برادکست هارو داره اما خیلی خیلی محدود هست و اینتنت های اندروید به اینها ختم نمیشه و خیلیییییی وجود داره. خب ما اومدیم این محدودیت رو پوشش دادیم با این کتابخانه.

و همچنین در نظر داشته باشید مثلا اینتنت BATTRY_CHANGED کلاس PhoneEvents تمام اطلاعاتی که واقعا این اینتنت میده رو به ما return نمیکنه، یعنی اطلاعاتی مثل شارژر USB هست یا پریز برق، اطلاعات مروبط به تکنولوژی باتری و... رو نمیده. بقیه اینتنت هاش هم تقریبا همینطور.

ممنون از نظرتون، اگه کسی با PhoneEvents نیازش رفع میشه پیشنهاد میکنم از همون استفاده کنید تا با ساده ترین کد راهش بندازید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

با سلام خدمت جناب نیکروان

 

اول ک باید واقعا تشکر کنم از زحمتایی ک واسه انجمن میکشید 

 

دوم یه سوال داشتم من میخواستم واسه  PHONE_STATE  ایونت ها رو بیرون بیارم از کد زیر استفاده کردم اما ن مسیج باکس رو نشون میده نه لیستم رو

 

این در صورتی هست که همین کد واسه BATTERY_CHANGED کامل کار میکنه

 

ممنون میشم راهنمایی کنید

Sub Button1_Click
	pnb1.Initialize("pnb1")
	pnb1.AddAction("android.intent.action.PHONE_STATE")
	pnb1.RegisterReceiver

End Sub

Sub pnb1_OnReceive(Action As String,keys() As String,Data As Object)
        Msgbox(Action,"")
	InputList(keys,"",0)
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

 

با سلام خدمت جناب نیکروان

 

اول ک باید واقعا تشکر کنم از زحمتایی ک واسه انجمن میکشید 

 

دوم یه سوال داشتم من میخواستم واسه  PHONE_STATE  ایونت ها رو بیرون بیارم از کد زیر استفاده کردم اما ن مسیج باکس رو نشون میده نه لیستم رو

 

این در صورتی هست که همین کد واسه BATTERY_CHANGED کامل کار میکنه

 

ممنون میشم راهنمایی کنید

 

سلام، خواهش میکنم.

شما باید چندتا نکته رو در نظر داشته باشید.

1- به این اینتنت باید توی سرویس گوش بدید، نه اکتیویتی، چون وقتی فقط داخل اکتیویتی هستید کار میکنه، ولی زمانیکه گوشی زنگ میخوره اکتیویتی فعلی متوقف میشه. پس باید از سرویس استفاده کنید.

2- وقتی توی اکتیویتی هستید میتونید Msgbox یا inputList نشون بدید، ولی توی سرویس نمیشه!

3- این دسترسی رو باید اضافه کنید:

android.permission.READ_PHONE_STATE

بخاطر همین سورسش رو واستون آماده کردم، وقتی گوشی زنگ میخوره یا زنگ میزنید با یه ToastMessage وضعیت و شماره تلفن رو نشون میده.

http://s7.picofile.com/file/8255073984/calling.zip.html

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام، خواهش میکنم.

شما باید چندتا نکته رو در نظر داشته باشید.

1- به این اینتنت باید توی سرویس گوش بدید، نه اکتیویتی، چون وقتی فقط داخل اکتیویتی هستید کار میکنه، ولی زمانیکه گوشی زنگ میخوره اکتیویتی فعلی متوقف میشه. پس باید از سرویس استفاده کنید.

2- وقتی توی اکتیویتی هستید میتونید Msgbox یا inputList نشون بدید، ولی توی سرویس نمیشه!

3- این دسترسی رو باید اضافه کنید:

android.permission.READ_PHONE_STATE

بخاطر همین سورسش رو واستون آماده کردم، وقتی گوشی زنگ میخوره یا زنگ میزنید با یه ToastMessage وضعیت و شماره تلفن رو نشون میده.

http://s7.picofile.com/file/8255073984/calling.zip.html

 

خیلی خیلی ممنون از پاسخ گوییتون 

 

من فقط جهت تست اینا رو تو اکتیویتی نوشتم میخواستم ایونت ها رو ببینم 

 

ولی الان با کد شما هم نتونستم ایونتا رو ببینم

 

مشکل اینجاس که تابع OnReceive اصلا اجرا نمیشه!!!!!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خیلی خیلی ممنون از پاسخ گوییتون 

 

من فقط جهت تست اینا رو تو اکتیویتی نوشتم میخواستم ایونت ها رو ببینم 

 

ولی الان با کد شما هم نتونستم ایونتا رو ببینم

 

مشکل اینجاس که تابع OnReceive اصلا اجرا نمیشه!!!!!

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

باید ToastMessage بده تست شده. اگه نداد لاگ بذارید ببینید لاگ میده یانه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

باید ToastMessage بده تست شده. اگه نداد لاگ بذارید ببینید لاگ میده یانه.

 

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

 

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

 

که این کد رو نوشتم و کاملا درست جواب میده

Sub Button1_Click
	pnb1.Initialize("pnb1")
	pnb1.AddAction("android.intent.action.BATTERY_CHANGED")
	pnb1.RegisterReceiver

End Sub

Sub pnb1_OnReceive(Action As String,keys() As String,Data As Object)
        Msgbox(Action,"")
	InputList(keys,"",0)
End Sub

ولی همین کد رو واسه PHONE_STATE مینویسم اصلا جواب نمیده ینی اصلا وارد OnReceive  نمیشه ک مسیج باکس رو نشون بده البته من این تست را رو چنتا اینتنت دیگه انجام دادم ک واسه بعضیا جواب میده ولی واسه اکثریت جواب نمیده

 

ممنون میشم خودتون هم توی اکتیویتی و با یک دکمه تست کنید!!!!!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون میشم خودتون هم توی اکتیویتی و با یک دکمه تست کنید!!!!!

اگه به پاسخ اولم نگاه میکردید من خدمتتون عرض کردم:

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

 

درضمن شما فکر کنم کلا برادکست رسیور رو بد برداشت کردید!!!

وقتی روی باتن کلیک میکنید نباید رویداد OnReceive اجرا بشه که عزیز.

 

طبق کدهای شما، با کلیک شدن روی باتن، به اینتنت مورد نظر فقط گوش داده میشه و وقتی اتفاق بیفته مسیج باکس نشون داده میشه!!!

 

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

 

هر اینتنت ای زمانی واسه خودش اجرا میشه دیگه، وقتی شما دارید PHONE_STATE گوش میدید نباید انتظار داشته باشید وقتی روی باتن کلیک شد درجا اجرا بشه که.

PHONE_STATE یعنی وقتی گوشی زنگ خورد به من اعلان داده بشه. :wacko1:

کمی تفکر لطفاً...

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اگه به پاسخ اولم نگاه میکردید من خدمتتون عرض کردم:

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

 

درضمن شما فکر کنم کلا برادکست رسیور رو بد برداشت کردید!!!

وقتی روی باتن کلیک میکنید نباید رویداد OnReceive اجرا بشه که عزیز.

 

طبق کدهای شما، با کلیک شدن روی باتن، به اینتنت مورد نظر فقط گوش داده میشه و وقتی اتفاق بیفته مسیج باکس نشون داده میشه!!!

 

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

 

هر اینتنت ای زمانی واسه خودش اجرا میشه دیگه، وقتی شما دارید PHONE_STATE گوش میدید نباید انتظار داشته باشید وقتی روی باتن کلیک شد درجا اجرا بشه که.

PHONE_STATE یعنی وقتی گوشی زنگ خورد به من اعلان داده بشه. :wacko1:

کمی تفکر لطفاً...

 

اها الان کامل متوجه شدم چی شد :give_rose: 

 

فقط ی راهنمایی کنید که چجوری میتونم به همه ایونت های یک اینتنت رو پیدا کنم

 

مثلا شما واسه PHONE_STATE رویداد incoming_number رو داخل توست گذاشتید منی که با اینتنت PHONE_STATE  اشنا نیستم باید از کجا این رویداد ها رو بدونم؟؟؟

 

بازم ممنون کخ وقت گذاشتید و کامل روشنم کردید :give_rose:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اها الان کامل متوجه شدم چی شد :give_rose:

 

فقط ی راهنمایی کنید که چجوری میتونم به همه ایونت های یک اینتنت رو پیدا کنم

 

مثلا شما واسه PHONE_STATE رویداد incoming_number رو داخل توست گذاشتید منی که با اینتنت PHONE_STATE  اشنا نیستم باید از کجا این رویداد ها رو بدونم؟؟؟

 

بازم ممنون کخ وقت گذاشتید و کامل روشنم کردید :give_rose:

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

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

Sub pn_OnReceive(Action As String,keys() As String,Data As Object)
	For i=0 To keys.Length-1
		Log(keys(i))
	Next
	
	
	Dim intent1 As Intent=Data
	
	ToastMessageShow("وضعیت: "&intent1.GetExtra("state")&CRLF&"شماره تلفن: "&intent1.GetExtra("incoming_number"),True)
	
End Sub

مثلا برای PHONE_STATE خروجی توی لاگ میشه این:

State

incoming_number

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 3 هفته بعد...

سلام. چگونه میشه از broadcast

android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED

استفاده کرد؟ مثلاً هنگامی که این broadcast اجرا میشه پیامی به کاربر نشون بده.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

@@پژمان نیکروان,

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

یه سوال ریز

برای دریافت پیامک از کدوم اکشن باید استفاده کرد؟

android.provider.Telephony.SMS_CB_RECEIVED 
 یا 
android.intent.action.DATA_SMS_RECEIVED 

من هر دو اینارو تست کردم ولی نشد.تو رویداد pn_OnReceive اینو نوشتم ولی نه لاگ میده نه عمل انجام میشه. 

if Action=" yeki az action haye bala " Then 
			CallSub(Me,"sms1_MessageReceived")    
			Log("sms recieved")    
	End If
 

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

@@پژمان نیکروان,

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

یه سوال ریز

برای دریافت پیامک از کدوم اکشن باید استفاده کرد؟

android.provider.Telephony.SMS_CB_RECEIVED 
 یا 
android.intent.action.DATA_SMS_RECEIVED 

من هر دو اینارو تست کردم ولی نشد.تو رویداد pn_OnReceive اینو نوشتم ولی نه لاگ میده نه عمل انجام میشه. 

if Action=" yeki az action haye bala " Then 
			CallSub(Me,"sms1_MessageReceived")    
			Log("sms recieved")    
	End If
 

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

 

با این اکشن باید sms رو بگیریرین : 

android.provider.Telephony.SMS_RECEIVED

این دسترسی رو هم از طریق منیفست به برنامه اضافه کنید:

android.permission.BROADCAST_SMS
لینک ارسال
به اشتراک گذاری در سایت های دیگر

@,

 

مهندس واقعا عالی اوکی شد کار برنامم :DD:  .این ینی 50 درصد موفق شدم.50 درصد بقیه راه اندازی اپ کامپت و متریاله که برا اونم تاپیک خواهم زد. :malih:  :wacko1:

یه سوال دیگه.الان من بخوام چندتا رسیور درست کنم باید چنتا متغیر از نوع برادکست رسیور تعریف کنم یا فقط با همون اولی میشه به چنتا اکشن گوش داد؟ :fekr:

ممنون میشم اینم راهنمایی کنید   :girl_blush:  

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • اضافه کردن...