Androidはタイミングアラーム機能を実現


携帯電話のアラームは生活に不可欠な重要なツールであり、アラーム機能は携帯電話の標準装備となっており、直接携帯電話をアラームとして使う人が増えている.
Androidの携帯電話にもAlarm Clockが内蔵されており、Android APIにはAlarmManagerクラスが用意されており、指定された時間にいくつかの動作を実行できるように設定されています.
この文書では、AlarmManagerのset()とsetRepeating()の2つの方法を使用して、次のような2つの異なるタイプのアラーム、使い捨てアラーム、周期的アラームを実現します.
1)クラスCallAlarmを作成する.JAvaは独自のBroadcastReceiverとして、アラームの設定時間になるとBroadcastReceiverが呼び出され、onReceive()のプログラムが実行されます.具体的なコードは以下の通りです.
package com.example.androidapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class CallAlarm extends BroadcastReceiver{

	@Override
	public void onReceive(Context context, Intent intent){
		if(intent.getAction().equals("0")){
			Toast.makeText(context, "     ", Toast.LENGTH_LONG)
					.show();
		}else if(intent.getAction().equals("1")){
			Toast.makeText(context, "     ", Toast.LENGTH_LONG)
					.show();
		}else{
			
		}
	}
}
2)AndroidManifest.xmlにCallAlarmのreceiver設定を追加し、アプリケーションが起動されると、まずこのReceiverを登録します.具体的なコードは以下の通りです.
<!--   receiver CallAlarm -->
        <receiver android:name=".CallAlarm" android:process=":remote"></receiver>
)MainActivityを修正する.JAvaは設定(削除)使い捨てアラームと周期的アラームを実現し、具体的なコードは以下の通りである.
package com.example.androidapp;

import java.util.Calendar;

import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

	private Calendar calendar=Calendar.getInstance();
	private Button button1=null;
	private Button button2=null;
	private Button button3=null;
	private Button button4=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		/*       */
		button1=(Button)findViewById(R.id.button1);
		button1.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				/*    5s    */
				calendar.setTimeInMillis(System.currentTimeMillis());
				calendar.add(Calendar.SECOND, 5);
				/*5s    CallAlarm.class*/
				Intent intent=new Intent(MainActivity.this,CallAlarm.class);
				intent.setAction("0");
				PendingIntent pendingIntent=
						PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
				AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
				alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
			}
		});
		/*       */
		button2=(Button)findViewById(R.id.button2);
		button2.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				/*  Intent     Intent          */
				Intent intent=new Intent(MainActivity.this,CallAlarm.class);
				intent.setAction("0");
				PendingIntent pendingIntent=
						PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
				AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
				alarmManager.cancel(pendingIntent);
			}
		});
		/*       */
		button3=(Button)findViewById(R.id.button3);
		button3.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				/*5s       CallAlarm.class*/
				Intent intent=new Intent(MainActivity.this,CallAlarm.class);
				intent.setAction("1");
				PendingIntent pendingIntent=
						PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
				AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
				alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
						SystemClock.elapsedRealtime(), 5*1000, pendingIntent);
			}
		});
		/*       */
		button4=(Button)findViewById(R.id.button4);
		button4.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				/*  Intent     Intent          */
				Intent intent=new Intent(MainActivity.this,CallAlarm.class);
				intent.setAction("1");
				PendingIntent pendingIntent=
						PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
				AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
				alarmManager.cancel(pendingIntent);
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}