PDA

View Full Version : انجام عمل دلخواه در صورت گذشت 24 ساعت



zzyaser
دوشنبه 27 خرداد 1392, 10:03 صبح
سلام دوستان امید وارم حالتون خوب باشه
کدی نوشتم که در ستونی در دیتابیس ساعت سیستم رو ذخیره کنه حالانیاز به تابعی دارم تا زمان اخیر رو از زمان رکورد موجود در دیتابیس کم کنه و اگه 24 ساعت گذشته باشه عمل مورد نظررو انجام بده چطوری باید این کارو بکنم؟

darkenerboy
دوشنبه 27 خرداد 1392, 11:57 صبح
علیک سلام
فکر کنم واسه این به تاریخ هم احتیاج داری
بعدشم روز ذخیره شده رو از روز جاری کم میکنی اگه که اختلاف یک بود
یعنی فرداست
بعد هم ساعت رو مقایسه میکنی اگه ساعت رو 24 گرفته باشی خیلی راحته
اگه ساعت جاری بزرگتر یا مساوی ساعت ذخیره شده بود یک روز گذشته
فقط مساوی خوب نیست !
ولی در حالت ذخیره فقط ساعت
برنامت گذشت بیشتر از یک روز رو متوجه نمیشه
اگه به هر دلیلی 24 ساعت بعد اجرا نباشه وقتی اجرا شه عکس العمل اشتباهی رو انجام میده

موفق باشی

abbasalim
دوشنبه 27 خرداد 1392, 14:52 عصر
سلام
اگه میخواین بعد از 24 ساعت (یا هر بازه زمانی دیگه) یک کاری رو در پس زمنیه انجام بده باید ابتدا یک سرویس بسازید و بعد کد زیر رو داخلش بزارید :


Thread Tekrar = new Thread() {
public void run() {
////کاری که میخواین 24 ساعت یک بار انجام بده
}

handler.postDelayed(this, adad);






adad = زمان تکرار بر حسب میلی ثانیه

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


Notification note=new Notification(R.drawable.ic_launcher,
"barname dar hale ejras",
System.currentTimeMillis());
Intent i=new Intent(BackgroundSoundService.this, Main.class);

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|
Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pi=PendingIntent.getActivity(this, 0,
i, 0);

note.setLatestEventInfo(this, "Rabbit",
"برنامه درحال اجراست",
pi);
note.flags|=Notification.FLAG_NO_CLEAR;

startForeground(1337, note);






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

shahin bahari
دوشنبه 27 خرداد 1392, 16:30 عصر
روشی که جناب abbasalim (http://barnamenevis.org/member.php?260884-abbasalim) گفتند اصولی تر هست تا این که هی زمان رو مقایسه کنید. فقط یه اصلاح نیاز داره و این که چون این زمان طولانی هست خیلی جالب نیست یه ترد تعریف کنیم و 24*60*60*1000 میلی ثانیه منتظرش بزاریم. این روش جواب میده اما بهترین حالت نیست. برای این کار بهتره از کلاس alarm manager استفاده کنید.

Modernidea
سه شنبه 28 خرداد 1392, 03:04 صبح
سلام دوستان امید وارم حالتون خوب باشه
کدی نوشتم که در ستونی در دیتابیس ساعت سیستم رو ذخیره کنه حالانیاز به تابعی دارم تا زمان اخیر رو از زمان رکورد موجود در دیتابیس کم کنه و اگه 24 ساعت گذشته باشه عمل مورد نظررو انجام بده چطوری باید این کارو بکنم؟

سلام

همونطور که گفتند، Alarm Manager دقیقا مناسب کار مورد نظر شماست.
در این مورد جستوجو کنید و کمی مطالعه کنید (http://nerdwin15.com/2013/04/android-creating-an-alarm-with-alarmmanager/) و بعد، فایل سمپل ضمیمه شده را دانلود و بررسی کنید.
کاری که شما قصد پیاده سازی آن را دارید، کمی پیاد سازی آن برای بار اول ممکن است پیچیده باشد اما شدنی است.

روشی که من به نظرم میرسه:
فرضا در هر رکورد فیلدی به نام Scheduled (زمانبندی شده) و فیلدی به نام Time (زمان) داریم.
زمان فعلی سیستم را منهای زمان موجود در رکورد میکنیم، مقدار بدست آمده، مقدار زمانی است که عملیات مورد نظر باید از زمان فعلی به مدت آن مقدار زمان بعد تر اجرا شود.
این مقدار زمان بدست آمده را باید به Alarm Manager بدهیم تا آن را در آینده انجام دهد.
برای مثال، زمان فعلی 1:10 است، زمان ثبت شده در رکورد 1:05 است،5 = 1:05 - 1:10 ، پس 55 = 5 - 60 ، دقیقه دیگر نسبت به زمان موجود در رکورد باید عملیات مورد نظر انجام شود.
خب، ما زمان بندی را برای این رکورد انجام دادیم، پس فیلد Scheduled را برابر با true میکنیم تا مشخص شود که این رکورد زمان بندی شده است.

منبع فایل ضمیمه (http://alchemiaandroid.altervista.org/AlarmManagerTutorial.html)

موفق باشید.