目覚まし時計のように、ある時刻になったら通知をしてくれるケースについて処理について説明します。
まず、起因に下になる 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 処理は、いろいろなケースで利用されます。
まず、一般的に多い処理と思われるボタンをクリックした際に、メールを作成する場合について説明します。
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); |
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 を停止しておりましたが、このたび、バージョン 1.02 として再度公開いたしました。