آموزش زمان بندی Task ها در برنامه نویسی اندروید
سلام دوستان امیدوارم حالتان خوب باشد در این سری از آموزش برنامه نویسی اندروید به آموزش زمان بندی Task ها در برنامه نویسی اندروید در اندروید برای زمان بندی کارها از AlarmManager استفاده می شود به طور مثال اگر بخواهید یک کاری را دو بار در روز به صورت اتوماتیک Scheduled کنید می توانید از AlarmManager استفاده کنید با ما همراه باشید.
ابتدا کد Layout همانند زیر می شود در آن یک TimePicker و یک Button قرار گرفته است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp"> <LinearLayout android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:orientation="vertical"> <TimePicker android:id="@+id/timePicker" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/buttonAlarm" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Set Alarm" /> </LinearLayout> </RelativeLayout> |
کد بالا همچین layout ی را برای ما ایجاد می کند که در زیر می توانید آن را مشاهده کنید.
حالا باید Broadcast Receiver را برای Alarm ایجاد کنیم پس یک فایل جاوا به نام MyAlarm ایجاد کرده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 | public class MyAlarm extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("MyAlarmBelal", "Alarm just fired"); } } |
در کد بالا ما فقط Log میندازیم شما باید کاری که می خواهید هر با انجام شود را در کد بالا قرار دهید.
وارد فایل AndroidManifest.xml شده و کدهای زیر را در قبل از بسته شدن تگ application قرار دهید.
1 2 3 4 | <receiver android:name=".MyAlarm" android:enabled="true" android:exported="true" /> |
و در آخر باید Alarm خودمان را در MainActivty تنظیم کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package net.simplifiedlearning.alarmmanagerexample; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TimePicker; import android.widget.Toast; import java.util.Calendar; public class MainActivity extends AppCompatActivity { TimePicker timePicker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); timePicker = (TimePicker) findViewById(R.id.timePicker); findViewById(R.id.buttonAlarm).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Calendar calendar = Calendar.getInstance(); if (android.os.Build.VERSION.SDK_INT >= 23) { calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), timePicker.getHour(), timePicker.getMinute(), 0); } else { calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0); } setAlarm(calendar.getTimeInMillis()); } }); } private void setAlarm(long time) { AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(this, MyAlarm.class); PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0); am.setRepeating(AlarmManager.RTC, time, AlarmManager.INTERVAL_DAY, pi); Toast.makeText(this, "Alarm is set", Toast.LENGTH_SHORT).show(); } } |
ما یک متود به نام setAlarm ایجاد کردیم که Alarm manager را تنظیم می کند در بالا ما ساعت و دقیقه از TimePicker دریافت می شود و بقیه مقادیر که لازم است تا Alarm تنظیم شود از کلاس Calendar دریافت می شود.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
خسته نباشید استاد …
اگه بخواهیم یه برنامه بسازیم که چن تا جمله کوتاه باشه رو هر 24 ساعت که میگذره به ترتیب نمایش بده رو همین باید از کلاس Calendar استفاده کنیم یا از Thread ها باید استفاده کنیم ؟؟؟
سلام باید از Alarm manager استفاده کنید
سلام این روش مشکل داره چون فرض کنیم ما میخوایم یک پیام هر روز راس ساعت 21 پخش بشه
اگه از setRepeating استفاده کنیم ی تاخیر چند دقیقه ای برای روزهای بعد مثلا فرداش اتفاق میوفته
باید جور دیگه ای عمل کرد
اما نمیدونم دقیقا چکار باید کرد