رفتن به مطلب

آموزش انجام عملی در ساعت و تاریخ مشخص با سرویس + سورس ساعت زنگدار


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

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

بنام یگانه برنامه نویس عالم ، خداوند متعال

سلام دوستان ♥

 

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

 

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

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

 

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

android.intent.action.TIME_TICK

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

 

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

 

 

خب قبل از همه چیز قطعا یک سرویس میسازیم و اون سرویس رو باراه هایی که تو سایت گفته شده ماندگار میکنیم.(البته نگران نباشید داخل سورسی که پایین گذاشتم اینکارانجام شده)

کتابخانه PNBroadcastReceiver رو تیک میزنیم و متغیر زیر:

Sub Process_Globals
	Dim pn As PNBroadcastReceiver
End Sub

فعال سازی و گوش دادن به اکشن TIME_TICK:

Sub Service_Create
	pn.Initialize("pn")
	pn.AddAction("android.intent.action.TIME_TICK")
	pn.RegisterReceiver
End Sub

و ایجاد رویداد زیر:

Sub pn_OnReceive(Action As String,keys() As String,Data As Object)
	
End Sub

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

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

Sub pn_OnReceive(Action As String,keys() As String,Data As Object)
	Dim time,date As String
	time=Tabdil(DateTime.Time(DateTime.Now))
	date=Tabdil(DateTime.Date(DateTime.Now))
	
	If time="23:20:00" And date="03/30/2016" Then
		ToastMessageShow("دیرینگ دیرینگ... :D",True)
	End If
End Sub

و تابع زیر رو بین sub هاتون ایجاد کنید:

Sub Tabdil(matn As String) As String
	Private res As String=matn
	
	res=res.Replace("۰","0")
	res=res.Replace("۱","1")
	res=res.Replace("۲","2")
	res=res.Replace("۳","3")
	res=res.Replace("۴","4")
	res=res.Replace("۵","5")
	res=res.Replace("۶","6")
	res=res.Replace("۷","7")
	res=res.Replace("۸","8")
	res=res.Replace("۹","9")
	
	Return res
End Sub

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

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

 

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

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

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

 

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

ساعت زنگدار

امیدوارم راضی باشید و کارتونو راه بندازه.

هر سوالی داشتید راجع به کدها یا جایی واستون مبهم بود بگید تا توضیح بدم :53:

 

***مهم***

دوستان جایگزین آموزش بالا تاپیک زیر هست، بنابراین بهتره از کتابخانه زیر استفاده کنید، چون آموزش بالا رو میشه گفت تقریبا غیراستاندارد هست

 

 

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

خسته نباشی استاد نیکروان عزیز :53:

حال کردیم با این حرکتت :yahoo:

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

ممنون عالی بود

ولی چند تا سوال :

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

یه ادیت تکست دارم واسه عنوان نوتیفی ، یه ادیت تکست واسه توضیحات نوتیفی ، یه انتخاب ساعت و یه انتخاب تاریخ (میخوام ساعت رو مثل قسمت ساعت هشدار گوشی نشون بده و کاربر انتخاب کنه )

حالا چطور چنین چیزیوتو این سورس پیاده کنم؟

سوال دومم : اینه میخوام یه چک باکس داشته باشم که اگه تیک خورد بیاد و "هر روز" تو همون ساعت و روزی که کاربر مشخص کرده بهش اون نوتیفیکیشن(که عنوان و توضیحش روهم کاربر مشخص کرده) رو نشون بده

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

ممنون میشم جواب بدین

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

@@cloner01001,

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

و اگر چیزی رو بلد نبودید حتماً سرچ کنید امکان نداره به جواب نرسید چون کامل کامل در مورد دیتابیس و سرویس بحث شده

اگر جایی از کار گیر کردی سوال کن :53:

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

ممنون عالی بود

ولی چند تا سوال :

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

یه ادیت تکست دارم واسه عنوان نوتیفی ، یه ادیت تکست واسه توضیحات نوتیفی ، یه انتخاب ساعت و یه انتخاب تاریخ (میخوام ساعت رو مثل قسمت ساعت هشدار گوشی نشون بده و کاربر انتخاب کنه )

حالا چطور چنین چیزیوتو این سورس پیاده کنم؟

سوال دومم : اینه میخوام یه چک باکس داشته باشم که اگه تیک خورد بیاد و "هر روز" تو همون ساعت و روزی که کاربر مشخص کرده بهش اون نوتیفیکیشن(که عنوان و توضیحش روهم کاربر مشخص کرده) رو نشون بده

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

ممنون میشم جواب بدین

خواهش میکنم.

همونطور که بالا هم گفتم:

 

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

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

اما بقول آقا محمد با یکم تحقیق و خلاقیت میتونید راحت به نتیجه برسید.

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

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

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

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

اقا این وقتی برنامه بسته میشه عمل نمیکنه که چکار کنم؟

1-از سرویس باید استفاده کنی

2-سرویس رو همیشه فعال کن

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

1-از سرویس باید استفاده کنی

2-سرویس رو همیشه فعال کن

یعنی از   ServiceStartAt  استفاده کنیم?

خوب اینکه مثل قبل میشه

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

یعنی از   ServiceStartAt  استفاده کنیم?

خوب اینکه مثل قبل میشه

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

ServiceStartAt رو برای محکم کاری داخل Service_Start میذارن تا هرزگاهی سرویس رو استارت کنه برای اینکه بسته نشه.

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

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

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

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

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

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

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

این دیگه خلاقیت خودتونه ، مثلا میتونید زمان های مختلف رو ذخیره سازی کنید(همونطور که در سورس یک زمان ذخیره شد)

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

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

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

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

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

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

سلام

این برای من کار نمی کنه

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

من چه کنم؟

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

سلام

این برای من کار نمی کنه

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

من چه کنم؟

سلام

دقیقا همین سورس رو اجرا کردین اینطوری شد؟؟

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

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

راستش من نمیدونم خطای لاگ چیه

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

متاسفانه برنامه متوقفشده است

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

راستش من نمیدونم خطای لاگ چیه

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

متاسفانه برنامه متوقفشده است

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

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

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

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

آقا دستت درد نکنه

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

پروژه قبلی رو موقتا گذاشتم کنار تا این اپ رو بنویسم (خخخخخخخخخخخخخخخ :) )

خیلی ممنون.

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

 

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

شما با دیتابیس و یه حلقه For میتونی اینکارو کنی( در واقع بنده دارم این کارو الان انجام میدم خخخخخخخ)

البته با Map هم میشه ولی خب دیتابیس بهتره

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

بایگانی شده

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

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

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