京都のスマートフォン・アンドロイドアプリ開発会社のサイトです!

開発日記
当社アプリに関するお知らせや開発裏話を綴ります。

AlarmManager と NotificationManager

目覚まし時計のように、ある時刻になったら通知をしてくれるケースについて処理について説明します。

まず、起因に下になる Activity にて、AmarmManager に Intent を追加します。下記の例では、システム時間の15秒後に AlarmBroadcastReceiver が呼ばれます。

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 15); 
 
Intent intent = new Intent(this,AlarmBroadcastReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(this,0,intent,0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
 
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
Toast.makeText(this, "Alarm Start!", Toast.LENGTH_SHORT).show();

その AlarmBroadcastReceiver では、NotificationManager を使って、端末に通知を行います。

public class AlarmBroadcastReceiver extends BroadcastReceiver 
{
 
	/* (non-Javadoc)
	 * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
	 */
	@Override
	public void onReceive(Context context, Intent intent) 
	{
		NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
 
		Notification notification = new Notification(R.drawable.icon,context.getString(R.string.app_name),System.currentTimeMillis());
 
		Intent _intent = new Intent(context.getApplicationContext(),MainActivity.class);
		PendingIntent pending = PendingIntent.getActivity(context, 0, _intent, 0);
 
		notification.setLatestEventInfo(context.getApplicationContext(),"通知タイトル","通知説明",pending);
		manager.notify(1, notification);
		Toast.makeText(context, "Alarm Received!", Toast.LENGTH_SHORT).show(); 
	}
}

AlarmManager と NotificationManager を使う場合、AndroidManifest.xml にそれぞれを登録する必要があります。

        <receiver android:name=".AlarmBroadcastReceiver" android:process=":remote" />
        <service android:name="NotificationChangeService" />

Intent でメール作成

Intent 処理は、いろいろなケースで利用されます。
まず、一般的に多い処理と思われるボタンをクリックした際に、メールを作成する場合について説明します。

String email = getString(R.string.owner_email);
Uri uri = Uri.parse( "mailto:" + email );
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
intent.putExtra(Intent.EXTRA_SUBJECT, "メール件名");
intent.putExtra(Intent.EXTRA_TEXT, "メール本文");
startActivity(intent);

ImageButton や Button のイベント状態による表示変更

Button や ImageButton をフォーカスがあるときやボタンを押された時に表示を変更について説明します。

ここでは、ImageButton について説明します。まず、通常状態のボタン画像(ファイル名:btn_mouseout.png、リソースID:btn_mouseout)とボタンを押された時の画像(ファイル名:btn_mouseover.png、リソースID:btn_mouseover)を用意します。

最初に xml 定義で selector 要素で、ボタンの状態による表示の振舞いを記述(ファイル名:btn_state.xml、リソースID:btn_state)します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
	<!-- ボタンを押された時 -->
	<item
		android:state_pressed="true"
		android:state_enabled="true"
		android:drawable="@drawable/btn_mouseover"/>
	<!-- ボタンにフォーカスがあたった時 -->
	<item
		android:state_focused="true"
		android:state_enabled="true"
		android:drawable="@drawable/btn_mouseout">
	<!-- 上記以外の条件の時 -->
	<item
		android:state_enabled="true"
		android:drawable="@drawable/btn_mouseout">
</selector>

つぎにスタイル定義している xml に記述(ファイル名:style.xml、リソースID:style)します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
	:
	<style name="style_btn">
		<item name="android:background">@drawable/btn_state</item>
	</style>
	:
</resources>

最後に、このボタンを使っているレイアウト定義ファイルにスタイルを定義します。

	:
	<ImageButton
		android:id="@+id/btn_action"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		style="@style/style_btn" />
	:

au one Market に Math Drills Plus を公開しました。

諸事情により、au one Market  にて Math Drills Plus を停止しておりましたが、このたび、バージョン 1.02 として再度公開いたしました。

Copyright © 2011 HuNavi. All Rights Reserved.

このページの先頭へ