اجرای یک سری کد، در آینده و در زمانی که حتی برنامه اندروید در حال اجرا نمی باشد، با کلاس AlarmManager ، در برنامه نویسی اندروید
کلاس AlarmManager ، به شما این امکان را می دهد که یک سری کد را در آینده اجرا کنید، حتی اگر برنامه اندروید در حالت اجرا نباشد.
کلاس AlarmManager ، دسترسی به system alarm را در اختیار شما قرار می دهد.
به عنوان مثالی برای چگونگی استفاده از کلاس AlarmManager ، قصد داریم یک پروژه اندروید بسازیم که به این صورت عمل می کند که بعد از اشاره کاربر بر روی یک دکمه (Button)، دقیقا 20 ثانیه بعد، یک آهنگ هشدار پخش شده و همچنین یک پیام متنی توسط کلاس Toast به کاربر نمایش داده می شود و البته اهمیتی نداشته باشد که در آن زمان 20 ثانیه بعد، آیا برنامه اندروید در حالت اجرا است یا خیر (در هر دو صورت، عملیات مورد نظر به درستی اجرا گردد).
کدهای این پروژه اندروید بر اساس کدهای منبعی می باشد که لینک آن در انتهای مبحث ذکر شده است.
در برنامه eclipse ، ابتدا یک پروژه اندروید با نام Kelidestan.com_AlarmManager می سازیم (نام package را برابر com.kelidestan.alarmmanager انتخاب می کنیم. نام activity اصلی را برابر MainActivity انتخاب می نماییم و فایل xml متناظر آن را هم برابر activity_main.xml قرار می دهیم).
کپی کردن فایل مربوط به آهنگ در پروژه اندروید :
ابتدا در پوشه res ، یک پوشه با نام raw ساخته و فایل alarm.mp3 که باید برای پخش آهنگ به کار رود را در آن کپی می کنیم :
ساخت یک BroadcastReceiver که برای پخش آهنگ و نمایش یک متن به کار خواهد رفت :
باید در پروژه اندروید، یک BroadcastReceiver بسازیم و در کدهای آن، کدهای مربوط به پخش آهنگ و همچنین نمایش پیام متنی (با استفاده از کلاس Toast) را بنویسیم.
برای این منظور، در پروژه اندروید، یک کلاس (Class) جدید با نام MyBroadcastReceiver می سازیم :
و کدهای آن را به صورت زیر می نویسیم :
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.widget.Toast;
public class MyBroadcastReceiver extends BroadcastReceiver {
MediaPlayer mp;
@Override
public void onReceive(Context context, Intent intent) {
mp = MediaPlayer.create(context, R.raw.alarm);
mp.start();
Toast.makeText(context, "Kelidestan Alarm ....", Toast.LENGTH_LONG).show();
}
}
بخش زیر از کدها برای پخش آهنگ به کار می رود :
mp.start();
و بخش زیر نیز برای نمایش یک پیام متنی، با استفاده از کلاس Toast ، می باشد :
که پیام متنی زیر را نمایش خواهد داد :
اکنون باید این BroadcastReceiver ساخته شده را در فایل AndroidManifest.xml از پروژه اندروید، ذکر نماییم (به عنوان یک receiver) :
بنابراین باید کد زیر به کدهای فایل AndroidManifest.xml افزوده شود :
</receiver>
و علاوه بر آن، اجازه دسترسی (permission) مربوط به لرزیدن گوشی (VIBRATE) را نیز در فایل AndroidManifest.xml ذکر می کنیم (در صورت نیاز برای VIBRATE) :
بنابراین کل کدهای فایل AndroidManifest.xml به صورت زیر خواهد بود :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kelidestan.alarmmanager"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.kelidestan.alarmmanager.MainActivity"
android:label="@string/app_name" >
<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>
Activity اصلی پروژه اندروید :
پروژه اندروید دارای یک Activity (همان Activity اصلی) با نام MainActivity می باشد :
ابتدا فایل xml متناظر با آن (activity_main.xml) را باز کرده و یک دکمه (Button) را در آن قرار می دهیم :
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</RelativeLayout>
سپس کدهای فایل MainActivity.java را به صورت زیر می نویسیم :
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
Button b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button) findViewById(R.id.button1);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startAlert();
}
});
}
public void startAlert() {
int time_second = 20;
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ (time_second * 1000), pendingIntent);
Toast.makeText(this, "Alarm set in " + time_second + " seconds",Toast.LENGTH_LONG).show();
}
}
اجرای پروژه اندروید :
اکنون با اجرای پروژه اندروید بر روی یک گوشی واقعی، ابتدا Activity اصلی برنامه اندروید به صورت زیر نمایش داده می شود :
با اشاره بر روی دکمه (Button)، پیامی به صورت زیر را مشاهده می کنیم که بیان می کند تا 20 ثانیه دیگر، یک Alarm اجرا خواهد شد :
اکنون حتی اگر بخواهیم می توانیم از برنامه اندروید خارج شویم و 20 ثانیه صبر می کنیم. سپس یک پیام نمایش داده شده و آهنگ مورد نظرمان نیز پخش می شود :
دانلود پروژه اندروید :
دانلود فایل apk مربوط به پروژه اندروید :
دانلود پروژه اندروید (برای Eclipse) :