سیستم هشدار 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 دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --