رفتن به مطلب
  • 0

اجرای سرویس از داخل Service_Destroy با تایم مشخص


alirezakazemizaroomi

سوال

سلام

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

#Region  Service Attributes 
    #StartAtBoot: true
	#StartCommandReturnValue: android.app.Service.START_STICKY
	#ExcludeFromLibrary: True
#End Region

Sub Process_Globals

End Sub

Sub Service_Create

End Sub

Sub Service_Start (StartingIntent As Intent)

StartServiceAt("",DateTime.Now+240*360000,True)

End Sub

Sub Service_Destroy

	StartService("")
ToastMessageShow("سرویس استارت شد!!!",False)

End Sub

ولی مشکل اینجاست که بعد یه مدت که سرویس کار میکنه هی پیام میده "سرویس استارت شد!!!" که برا اینه که سرویسم بسته شده وتو کد بال گفتم اگه بسته شد دوباره استارت بشه،ولی من میخوام سرویسم اگر بسته هم شد با فاصله زمانی همون 24 ساعت باز اجرا بشه، کلا چه سرویس خراب شد چه خراب نشد سرویس هر 24 ساعت اجرا بشه، من کلا تو برنامم وقتی کاربر برا اولین بار برنامرو نصب کرد یکبار سرویس اجرا میشه من میخوام همون ساعتی که برنامه نصب شدو سرویس بگیره و هرشب همون ساعت سرویس خود بخود اجرا بشه  و اگه سرویس خرابم شد باز تو همون ساعت اجرا بشه کسی میدونه چطوری باید کدشو بنویسم؟

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

15 پاسخ به این سوال تاکنون داده شده است

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

سلام

ارورش برای این 2 نقطه هاست احتمالا

چون داره میگه نمیتونه این فرمت عددی رو قرارش بده.....

الان من دو نقطه هارم برداشتم باز همون ارورو میده:

lastexeption java long.NumberFormatExeption: Invalid double: "04 31 27"

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

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

ببین باید به یه زمان خاص که عدد خالی هست مقایسه بشه

اگه دقت کرده باشی اون کدی که دادم بهت، ساعت رو از 0 تا 23 به شکل اینت بر میگردوند

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

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

سلام

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

StartServiceAt("",DateTime.Now+240*360000,True)

بزار داخل ( نوشتم اینجا )

Sub Service_Destroy

	ایییییییییینجاااااا
ToastMessageShow("سرویس استارت شد!!!",False)

End Sub

این دستور StartService("" باغث میشه بدون زمان سریع سرویس اجرا بشه

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

سلام

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

StartServiceAt("",DateTime.Now+240*360000,True)

بزار داخل ( نوشتم اینجا )

Sub Service_Destroy

	ایییییییییینجاااااا
ToastMessageShow("سرویس استارت شد!!!",False)

End Sub

این دستور StartService("")  باغث میشه بدون زمان سریع سرویس اجرا بشه

ممنون از جوابت

اگه سوالو با دقت بخونی من گفتم مثلا سرویس بعد 8 ساعت خراب شد من میخوام تو Service_Destroy بعد از 16 ساعت اجرا بشه،چون ما نمیدونیم دقیق چه ساعتی سرویس خراب میشه برا همین یه کد دقیق میخوام که چک کنه چه ساعتی خراب شده،من کلا تو برنامم وقتی کاربر برا اولین بار برنامرو نصب کرد یکبار سرویس اجرا میشه من میخوام همون ساعتی که برنامه نصب شدو سرویس بگیره و هرشب همون ساعت سرویس خود بخود اجرا بشه  و اگه سرویس خرابم شد باز تو همون ساعت اجرا بشه

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

از StartServiceAtExact کن تویه سرویس دستروی.

ممنون از جوابت

ولی من میخوام اون تایمی که برنامه نصب شدو بگیرم مثلا کاربر ساعت 11 شب برنامه رو نصب کرد من میخوام هر شب ساعت 11 سرویسم اجرا بشه؟

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

ممنون از جوابت

ولی من میخوام اون تایمی که برنامه نصب شدو بگیرم مثلا کاربر ساعت 11 شب برنامه رو نصب کرد من میخوام هر شب ساعت 11 سرویسم اجرا بشه؟

سلام دوستم

اگه میخوای زمان اولین اجرای برنامه رو بگیری

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

DateTime.Time(DateTime.GetHour)

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

:fekr:  :fekr:

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

سلام دوستم

اگه میخوای زمان اولین اجرای برنامه رو بگیری

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

DateTime.Time(DateTime.GetHour)

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

:fekr:  :fekr:

سلام

ممنون از جوابتون

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

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

قربانت دلاور

ببین

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

If File.Exists(File.DirInternal,"time.txt") = False Then
	File.WriteString(File.DirInternal,"time.txt",DateTime.Date(DateTime.GetHour))
End If

توی سرویست هم باید ببنی زمانی که توی فایل هست با زمان همین الان یکی هست یا نه که یه کاری انجام بشه دیگه(یعنی مثلا اگه اولین زمان ساعت 10 شب هست که اینجا میشه 22 ، با زمان جاری چک شه و کاری انجام شه)

Dim mytime As Int
mytime = File.ReadString(File.DirInternal,"time.txt")

If DateTime.Date(DateTime.GetHour) = mytime Then
	'in zaman , zamane avvali ejraast'
End If
لینک ارسال
به اشتراک گذاری در سایت های دیگر

 

قربانت دلاور

ببین

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

If File.Exists(File.DirInternal,"time.txt") = False Then
	File.WriteString(File.DirInternal,"time.txt",DateTime.Date(DateTime.GetHour))
End If

توی سرویست هم باید ببنی زمانی که توی فایل هست با زمان همین الان یکی هست یا نه که یه کاری انجام بشه دیگه(یعنی مثلا اگه اولین زمان ساعت 10 شب هست که اینجا میشه 22 ، با زمان جاری چک شه و کاری انجام شه)

Dim mytime As Int
mytime = File.ReadString(File.DirInternal,"time.txt")

If DateTime.Date(DateTime.GetHour) = mytime Then
	'in zaman , zamane avvali ejraast'
End If

واقعا ممنون خیللی عالی شد

فقط من میخوام خود به خود سرویس هر شب تو این زمان( که ذخیره کردیم)اجرا بشه چطوری میتونیم mytime بیاریم تو StartServiceAt قرارش بدیم؟

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

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

StartServiceAt(myservice,mytime,False)

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

If DateTime.Date(DateTime.GetHour) = mytime Then
	StartServiceAt(myservice,DateTime.Now,False)
End If

که به نظرم کد دوم منطقی تر هستش

:gol:

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

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

StartServiceAt(myservice,mytime,False)

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

If DateTime.Date(DateTime.GetHour) = mytime Then
	StartServiceAt(myservice,DateTime.Now,False)
End If

که به نظرم کد دوم منطقی تر هستش

:gol:

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

خیلی ممنون :gol:

فقط تو کد زیر ارور" میسینگ پارامتر " میده:

	File.WriteString(File.DirInternal,"time.txt",DateTime.Date(DateTime.GetHour))
لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

StartServiceAt(myservice,mytime,False)

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

If DateTime.Date(DateTime.GetHour) = mytime Then
	StartServiceAt(myservice,DateTime.Now,False)
End If

که به نظرم کد دوم منطقی تر هستش

:gol:

کدو اینطوری نوشتم:

	File.WriteString(File.DirRootExternal ,"time.txt",DateTime.Time(DateTime.now))

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

 StartServiceAt("",mytime,True)
لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

StartServiceAt(myservice,mytime,False)

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

If DateTime.Date(DateTime.GetHour) = mytime Then
	StartServiceAt(myservice,DateTime.Now,False)
End If

که به نظرم کد دوم منطقی تر هستش

:gol:

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

Dim mytime As Int
    mytime = File.ReadString(File.DirRootExternal,"time.txt")
    StartServiceAt(starter,DateTime.GetHour(mytime),False)

ولی رو خط آخری ارور میده؛ارورش اینه:

lastexeption java long.NumberFormatExeption: Invalid double: "04:31:27"

ارورش برا چیه؟

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

سلام

ارورش برای این 2 نقطه هاست احتمالا

چون داره میگه نمیتونه این فرمت عددی رو قرارش بده.....

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

بایگانی شده

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

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

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