رفتن به مطلب

کتابخانه بسیار کاربردی PersianAlarmManager (**ویژه**)


 اشتراک گذاری

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

در 2 ساعت قبل، hojat63 گفته است :

 

دوست عزیز کدهاتونو توی تگ کد قرار بدید.

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

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

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

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

پست های محبوب

به نام خدا نسخه 2 کتابخونه منتشر شد تو این نسخه سرویس JobScheduler اندروید به کتابخونه اضافه شده. همچنین متدهای setclock و setwindow نیز به آلارم اضافه شده که بسیار کاربردی هستن. سورس کار با

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

این مشکل رو خود من هم توی جاوا دارم و ظاهر مشکل از خود AlarmManager هست. گوگل تو این چند سال خیلی سختگیری و محدودیت روی سیستم عامل اندروید گذاشته برای برنامه نویسا و واقعا کاری از دست دولپرا ساخته نیس

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

شرمنده

کد تنظیم هشدار

Dim prmodel As PersianAlarmModel
    prmodel.initialize(AlarmService)
    prmodel.putStringExtra("keytime1",dif_time2)
    pralarm.setRepeating(prmodel,pralarm.AlarmManager_RTC_WAKEUP,pralarm.FLAG_UPDATE_CURRENT,1,pralarm.TimeUnit_SECONDS,20,20)

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

#Region  Service Attributes
    #StartAtBoot: False
    
#End Region

Sub Process_Globals

End Sub

Sub Service_Create
End Sub

Sub Service_Start (StartingIntent As Intent)
    Service.StopAutomaticForeground
    Dim alarmmdl As PersianAlarmModel
    Dim almid As String=StartingIntent.GetExtra("keytime1")

    alarmmdl.initialize(Null)
    
    Dim n As Notification
    CreateNotificationChannel(n.IMPORTANCE_HIGH)
    n.Initialize2(n.IMPORTANCE_HIGH)
    n.Icon="icon"
    n.Sound=True
    n.SetInfo("یادآوری","تعداد پیامک های امروز " &almid ,Main)
    n.Notify(alarmmdl.GenerateUniqId)
    
End Sub

Sub CreateNotificationChannel(ImportanceLevel As Int)
    Dim p As Phone
    If p.SdkVersion>=26 Then
        Dim ctxt As JavaObject
        ctxt.InitializeContext
        Dim channelId As String = "channel_" & ImportanceLevel
        Dim channel As JavaObject
        channel.InitializeNewInstance("android.app.NotificationChannel",Array(channelId,Application.LabelName,ImportanceLevel))
        
        channel.RunMethod("setShowBad",Array(False))
        
        Dim manager As JavaObject = ctxt.RunMethod("getSystemService",Array("notification"))
        manager.RunMethod("createNotificationChannel",Array(channel))
    End If
End Sub

Sub Service_Destroy

End Sub

ولی وقتی اجرا می کنم این خطا میاد

java.lang.RuntimeException: Object should first be initialized (PersianAlarmModel).

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

  • 1 ماه بعد...

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

عینا تمام کدها رو از سورس خودتون کپی کردم حتی اسم سرویس و همش

ولی ارور میده که

java.lang.RuntimeException: Object should first be initialized (PersianAlarmModel)

ممکنه با کتابخونه خاصی مشکل داشته باشه؟

سورس خودتون درست کار میکنه تو نرم افزار خودم ک میارم این ارورو میده

 

 

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

در 23 ساعت قبل، mahdi tahan گفته است :

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

عینا تمام کدها رو از سورس خودتون کپی کردم حتی اسم سرویس و همش

ولی ارور میده که

java.lang.RuntimeException: Object should first be initialized (PersianAlarmModel)

ممکنه با کتابخونه خاصی مشکل داشته باشه؟

سورس خودتون درست کار میکنه تو نرم افزار خودم ک میارم این ارورو میده

 

 

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

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

بعد از تلاش زیاد به علت جالبی برخوردم

و واقعا نمدونم چه ربطی به هم داره

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

:blink:

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

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

سلام

اگ بخوام دو ساعت مختلف رو ست کنم ک هر کدوم یک سرویس خاص رو اجرا کنه،ممکنه؟

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

انگار من میخوام یکی هر نیم ساعت کار کنه یکی هم هر یک ساعت.

کلا تا چنتا ممکنه؟

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

در 14 ساعت قبل، mahdi tahan گفته است :

سلام

اگ بخوام دو ساعت مختلف رو ست کنم ک هر کدوم یک سرویس خاص رو اجرا کنه،ممکنه؟

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

انگار من میخوام یکی هر نیم ساعت کار کنه یکی هم هر یک ساعت.

کلا تا چنتا ممکنه؟

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

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

	Private pralarm As PersianAlarmManager
	Private prmodel As PersianAlarmModel
	
	
	Private pralarm1 As PersianAlarmManager
	Private prmodel1 As PersianAlarmModel


	prmodel.initialize(AlarmService)
	prmodel1.initialize(up2)
	
	Dim time As Int=30
	Dim time1 As Int=40
		
	prmodel.putStringExtra("key1","value1")
	prmodel1.putStringExtra("key1","value1")
	
	pralarm.setRepeating(prmodel,pralarm.AlarmManager_RTC_WAKEUP,pralarm.FLAG_UPDATE_CURRENT,2,pralarm.TimeUnit_MINUTES,time,time)
	pralarm1.setRepeating(prmodel1,pralarm1.AlarmManager_RTC_WAKEUP,pralarm1.FLAG_UPDATE_CURRENT,3,pralarm1.TimeUnit_MINUTES,time1,time1)

اینطوری من ست میکنم یعنی کلا دوتا جدا از هم

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

 

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

در در 24 بهمن 1398 در 19:23، mahdi tahan گفته است :

اینطوری من ست میکنم یعنی کلا دوتا جدا از هم

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

 

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

Private Sub addAlarm(pr As PersianAlarmManager, Alarm As Object,request As Int,interval As Int)
  Dim alarmmodel As PersianAlarmModel
  alarmmodel.initialize(Alarm)
  pr.setRepeating(alarmmodel,pr.AlarmManager_RTC_WAKEUP,pr.FLAG_UPDATE_CURRENT,request,pr.TimeUnit_MINUTES,0,interval)
End Sub

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

Dim pr As PersianAlarmManager
  addAlarm(pr,alarm1,12,10)
  addAlarm(pr,alarm2,13,15)

 

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

  • 1 ماه بعد...

سلام

وقت بخیر 

چه جوری میشه اینو پایدارش کرد؟
ببنید من الان ناتفیکیشن رو drag می کنم و رد می کنم سرویس دیگه غیرفعال میشه 

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

 

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

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

  

در در 19 تیر 1398 در 14:52، محمدرضا شاهپیری گفته است :

 

 

 

جناب مهندس من کتابخانه Persian Alarm Manager روی اندروی 4.2.2 تست کردم جواب داد ولی ...

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

ولی آلارم اصلا اجرا نشد یعنی چه درحالت روشن بودن صفحه چه خاموش صفحه بودن.

 

ولی در حالت عادی یعنی این دو تا آلارم اجرا میشه.

AlarmManager_ELAPSED_REALTIME
AlarmManager_ELAPSED_REALTIME_WAKEUP

pralarm.setRepeating(prmodel,pralarm.AlarmManager_RTC,pralarm.FLAG_UPDATE_CURRENT,1,pralarm.TimeUnit_SECONDS,time,time)

 

مشکل از چیست ؟

   

 

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

محمدرضا شاهپیری

یعنی این کتابخونه دیگه پشتیبانی نمیشه ؟!

لطفا پاسخ پرسش بنده بدید.

 

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

در در 31 فروردین 1399 در 00:46، AdultWolf گفته است :

 
 

شما دقیقا میخواین چیکار کنید دوست عزیز؟ سوالتونو متوجه نشدم من.

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

در 11 ساعت قبل، محمدرضا شاهپیری گفته است :

شما دقیقا میخواین چیکار کنید دوست عزیز؟ سوالتونو متوجه نشدم من.

میخوام اگر صفحه خاموش بود آلارم دیگه اجرا نشود.

این دو قابلیت زیر در این کتاب خانه "کار نمیکنند" لطفا بررسی نمایید

AlarmManager_ELAPSED_REALTIME 

AlarmManager_ELAPSED_REALTIME_WAKEUP

 

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

در 10 ساعت قبل، AdultWolf گفته است :

میخوام اگر صفحه خاموش بود آلارم دیگه اجرا نشود.

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

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

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

سلام وقت بخیر

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

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

Dim t1 As Long = DateTime.TimeParse("18:00:00")
	Dim t2 As Long = DateTime.TimeParse("17:00:00")

	Dim p As Period = DateUtils.PeriodBetween(t1 , t2)

	Log(p.Hours & " hours, " & p.Minutes & " minutes , " & p.Seconds & "second") ' Return 1 hours , 10 minutes , 2 second
	Dim second As Int
	If p.Hours <> 0 Then
		second = (p.Hours*60)*60
	End If
	If p.Minutes <> 0 Then
		second = second + (p.Minutes*60)
	End If
	If p.Seconds <> 0 Then second = second + p.Seconds
	
	Log("sec : "&second)
	


اگر زمان به صورت شروع
"17:10:00"
و پایان
"16:10:00"
داده شود مقداریر نا صحیح بر می گردونه
باید چی کار کنیم در رابطه با این موضوع؟

 

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

در 23 دقیقه قبل، ali mo گفته است :

 

این مورد به نظرم ضعف کتابخونه DateTime بیسیک هست.من سعی میکنم پکیج Calendar رو به کتابخونه ست کنم که دوستان بتونن به راحتی تایم دلخواه رو ست کنن

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

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

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

اول این سابو اضافه کن

Sub between(t1 As Long,t2 As Long) As String
	Dim t As Long=Abs(t1-t2)
	
	
	hours = Floor((t Mod DateTime.TicksPerDay) / DateTime.TicksPerHour)
	minutes = Floor((t Mod DateTime.TicksPerHour) / DateTime.TicksPerMinute)

	Return hours&minutes
End Sub

بعد هر جا خواستی زمان رو بدی اول باید چک کنی زمانت ی روز بعده یا همون روزه

DateTime.TimeFormat="HH:mm:ss"
	
	
	Dim zaman As Long=DateTime.TimeParse("05:00:00")
	Dim ti As String
	If zaman>=DateTime.Now Then
		
		Log("today")
		ti=between( DateTime.Now , zaman)*60
	Else
		Log("tomarow")
			
		ti=between( DateTime.Now , DateTime.Add(zaman,0,0,1))*60
			
	End If

حالا اینطوری دقیقه باقیمونده تا زمانو میگیریم

Dim time3 As String=hours*60+minutes

 

بعدشم بر مبنی دقیقه ست میکنی

	pralarm.setRepeating(pr1,pralarm.AlarmManager_RTC_WAKEUP,pralarm.FLAG_UPDATE_CURRENT,2,pralarm.TimeUnit_MINUTES,time3,1440)

1440 هم دقایق 24 ساعته ینی روز بعدم همون ساعت ست میشه.

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

تو تمام گوشی ها به قسمت باتری نمیره.چک کردم.(سامسونگ a10(اندروید9))

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

ولی تو اندروید 9 مثلا setRepeating ک کلا دو سه دقیقه بعد تر الارم میده مثلا اگ فاصله ما 2 دقیقه باشه 5 دقیقه میده و حتی با گذشت زمان این فاصله هی بیشتر میشه.

با متد setExact بهتره ولی اونم ی دقیقه ای اختلاف داره و اگرم دستگاه خاموش باشه فاصله زمان دوبرابر میشه.

 

اگ میشه ی توضیحی بدید.اگ دسرسی لازمه بگیریم.البته من دسرسی باطری زیادومیگیرم

 

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

در 33 دقیقه قبل، mahdi tahan گفته است :

 

این مشکل رو خود من هم توی جاوا دارم و ظاهر مشکل از خود AlarmManager هست. گوگل تو این چند سال خیلی سختگیری و محدودیت روی سیستم عامل اندروید گذاشته برای برنامه نویسا و واقعا کاری از دست دولپرا ساخته نیست. خودش که اومده و توصیه کرده که از WorkManager و Job برای اینجور کارایی استفاده کنید و برای تسکهایی که دائم اجرا میشه هم محدودیت 15 دقیقه ای گذاشته. یعنی شما نمیتونید یه کاری رو هر 5 دقیقه یک بار انجام بدید. این رو توی AlarmManager هم باید رعایت کنید. من این موضوع رو پیگیری میکنم و سعی میکنم یه روش استاندراد و تا حد امکان دقیقتر توی کتابخونه اضافه کنم.

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

در 2 ساعت قبل، محمدرضا شاهپیری گفته است :

این مورد به نظرم ضعف کتابخونه DateTime بیسیک هست.من سعی میکنم پکیج Calendar رو به کتابخونه ست کنم که دوستان بتونن به راحتی تایم دلخواه رو ست کنن

ممنون استاد

من منتظرم پس راستش  انقدر تست امتحان کردم دیگه می خواستم از روش عادی تست کردن هر 5 ثانیه ساعت استفاده کنم که غیر بهینه است

در ۱ ساعت قبل، mahdi tahan گفته است :

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

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

اول این سابو اضافه کن

Sub between(t1 As Long,t2 As Long) As String
	Dim t As Long=Abs(t1-t2)
	
	
	hours = Floor((t Mod DateTime.TicksPerDay) / DateTime.TicksPerHour)
	minutes = Floor((t Mod DateTime.TicksPerHour) / DateTime.TicksPerMinute)

	Return hours&minutes
End Sub

بعد هر جا خواستی زمان رو بدی اول باید چک کنی زمانت ی روز بعده یا همون روزه

DateTime.TimeFormat="HH:mm:ss"
	
	
	Dim zaman As Long=DateTime.TimeParse("05:00:00")
	Dim ti As String
	If zaman>=DateTime.Now Then
		
		Log("today")
		ti=between( DateTime.Now , zaman)*60
	Else
		Log("tomarow")
			
		ti=between( DateTime.Now , DateTime.Add(zaman,0,0,1))*60
			
	End If

حالا اینطوری دقیقه باقیمونده تا زمانو میگیریم

Dim time3 As String=hours*60+minutes

 

بعدشم بر مبنی دقیقه ست میکنی

	pralarm.setRepeating(pr1,pralarm.AlarmManager_RTC_WAKEUP,pralarm.FLAG_UPDATE_CURRENT,2,pralarm.TimeUnit_MINUTES,time3,1440)

1440 هم دقایق 24 ساعته ینی روز بعدم همون ساعت ست میشه.

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

تو تمام گوشی ها به قسمت باتری نمیره.چک کردم.(سامسونگ a10(اندروید9))

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

ولی تو اندروید 9 مثلا setRepeating ک کلا دو سه دقیقه بعد تر الارم میده مثلا اگ فاصله ما 2 دقیقه باشه 5 دقیقه میده و حتی با گذشت زمان این فاصله هی بیشتر میشه.

با متد setExact بهتره ولی اونم ی دقیقه ای اختلاف داره و اگرم دستگاه خاموش باشه فاصله زمان دوبرابر میشه.

 

اگ میشه ی توضیحی بدید.اگ دسرسی لازمه بگیریم.البته من دسرسی باطری زیادومیگیرم

 

ممنون از توضیحاتتون

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

به گفتگو بپیوندید

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

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

 اشتراک گذاری

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

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

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