سیستم هشدار Alarm Manager یا زمانبندی برای اجرای برنامه در آینده
Android AlarmManager به شما اجازه می دهد تا به زنگ هشدار سیستم دسترسی پیدا کنید.با کمک Android AlarmManager در اندروید، می توانید برنامه خود را برای زمان خاصی در آینده اجرا کنید. این زمان بندی صرف نظر از اینکه سیستم تلفن شما خاموش یا روشن بوده باشد همچنان به کار خود ادامه خواهد داد. در واقع AlarmManager یک قفل بیدارباش از CPU را نگه می دارد که این امر تضمین می کند تا گوشی علی رغم به خواب رفتن همچون خاموشی همچنان به گوش به زنگ باشد.
در مبحث می خواهیم مثالی را به دوستان در مورد استفاده از این روش برای اجرای برخی از دستورات در ساعات یا زمان های مشخصی از اینده بزنیم. در این مثال می خواهیم برنامه ای بنویسیم که در آن برنامه بعد از یک مدت زمان مشخصی نوتیفکشن ایجاد کند و در مورد وضعیت کانکشن سیستم اندروید اطلاعاتی را به نشان دهد.
اگر در داخل برنامه اکلیپس یا اندروید استودیو قرار دارید پروژه جدیدی را ایجاد کنید
اکلیپس :File ⇒ New Android ⇒ Application Project
اندروید استودیو :File ⇒ New ⇒ New Project
اما اگر هنوز برنامه خود را باز نکرده اید یکی از برنامه های فوق را باز نموده و بعد از تعیین مشخصات(نامگذاری) ، تعیین حداقل sdk و نوع اکتیویتی (blank یا Empty) ، نام اکتیویتی ابتدایی و اصلی خود را همان MainActivity قرار دهید. بعد از لود کامل برنامه ، در مسیر res ⇒layout لایه متناظر اکتیوتی اصلی یعنی activity_main را پیدا نمود و کدهای مندرج و پیش فرض آن را پاک کرده و کدهای xml زیر را به آن اضافه کنید:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:gravity="center" android:id="@+id/relativeLayout"> </RelativeLayout> <Button android:layout_width="100dp" android:layout_height="50dp" android:gravity="center" android:id="@+id/button" android:text="تایید" android:layout_alignTop="@+id/relativeLayout" android:layout_centerHorizontal="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="لطفا زمان خود را بر حسب دقیقه اینجا بنویسید" android:id="@+id/textView" android:gravity="center" android:layout_above="@+id/button" android:layout_centerHorizontal="true" android:layout_marginBottom="52dp" /> </RelativeLayout>
سپس کلاس اصلی برنامه یعنی MainActivity را باز کرده و کدهای زیر را در آن قرار دهید.
package example.psrd.ir.myapplication; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.widget.EditText; import android.widget.Toast; import android.widget.Button; public class MainActivity extends AppCompatActivity { public EditText inputtime; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); inputtime = (EditText)findViewById(R.id.ed1); btn = (Button)findViewById(R.id.button); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String time = inputtime.getText().toString(); int settime = Integer.parseInt(time); if (!time.isEmpty()){ Intent intent = new Intent(MainActivity.this, MyBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 234324243, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (settime * 1000), pendingIntent); Toast.makeText(getApplicationContext(), "شروع الارم",Toast.LENGTH_LONG).show(); } } }); } }
کلاس جدیدی با نام MyBroadcastReceiver ایجاد کنید و کدهای زیر را در آن قرار دهید. این کلاس از این جهت مهم وضروری است که هنگامی که برنامه شما بسته شده باشد همچنان تایم دیوایس را رصد می کند و در زمان تعیین شده واکنش مناسب و تعریف شده شما را از خود بروز می دهد . در این کلاس مشخص شده است در زمان و موعد مقرر سیستم اندروید وضعیت کانکشن سیستم اندروید به را کنترل کرده و نتیجه آن را با یک پیام Toast نشان دهد.
package example.psrd.ir.myapplication; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.widget.Toast; /** * Created by h.ghanbari on 27/01/2018. */ public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager .getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { Toast.makeText(context, "شما به اینترنت دسترسی دارید", Toast.LENGTH_LONG).show(); } else { Toast.makeText(context, "شما به اینترنت دسترسی ندارید", Toast.LENGTH_LONG).show(); } } }
بعد از تعریف کلاس برادکاست رسیور لازم است که این کلاس را در فایل اندروید مانیفست(AndroidManfest.xml) تعریف کنیم. از این رو کد مشخص شده به رنگ قرمز به این فایل اضافه می کنیم.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="example.psrd.ir.myapplication" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyBroadcastReceiver"> </receiver> </application> </manifest>
حال پروژه را اجرا کرده و از آن در یادگیری هر چه بیشتر خود استفاده کنید. اگر مشکلی در اجرای کدها وجود دارد یا سوال مشخصی از نویسنده سایت دارید سوالات خود را در قسمت دیدگاه ها بیان کنید.
کپی برداری از محتوای سایت psrd، ممنوع بوده و پیگرد قانونی دارد. (تنها استفاده شخصی کاربران ، مجاز است) (کپی برداری توسط سایر وب سایت ها غیرقانونی بوده و در صورت رویت به ستادسازماندهی اطلاع داده خواهد شد.
0 دیدگاه