2012年2月26日日曜日

[Android SDK] ステータスバーに通知する

ステータスバーを使いユーザに通知する機能があります。実物を見てもらった方が分かりやすいのです。
①ステータスバーに表示する
②ステータスバーに通知が蓄積される

これは、標準で用意されているNotificationManagerで簡単に、任意のメッセージやアイコンを持った通知を発行できます。
まずは、通知内容をNotificationに設定します。
// Context context;
// String message, item_title, item_message;
Notification n = new Notification();
n.icon = R.drawable.ic_launcher;// アイコン(drawable指定)ここではアプリのアイコン
n.tickerText = message;// ステータスバーに表示する文字列(CharSequence指定)
n.when = System.currentTimeMillis();
// 通知をタップしたときに発行するインテント
Intent i = new Intent(context, RpNotifyActivity.class);
n.setLatestEventInfo(context, item_title, item_message, PendingIntent.getActivity(context, 0, i, 0));
あとは、NotificationManagerに渡すとステータスバーに表示されます。
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1,n);

2012年2月25日土曜日

[Android SDK] Android起動時にサービス等を起動する

Android起動時には"ACTION_REBOOT"インテントが発行されますので、BroadcastReceiverで受け取ることで任意の処理を実行できます。
1.BroadcastReceiverの準備
2.Intent Filterの登録
3.Permissionの登録

1.BroadcastReceiverの準備
参考に下記ように作成します。
package com.runpeta.android.notify;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class RpNotifyReceiver extends BroadcastReceiver {
 private static final String TAG = "RpNotifyReceiver";

 @Override
 public void onReceive(Context context, Intent intent) {
  Log.d(TAG, "onReceive");
  String action = intent.getAction();
  if (action != null) {
   if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
    // システム起動完了時
    Log.d(TAG, "ACTION_BOOT_COMPLETED");
    context.startService(new Intent(context, RpNotifyService.class));
   }
  }
 }
}
2.Intent Filterの登録
AndroidManifest.xmlを開き、BroadcastReceiverのIntent Filterに"ACTION_REBOOT"を登録します。

3.Permissionの登録
AndroidManifest.xmlを開き、Permissionに"RECEIVE_BOOT_COMPLETED"を登録します。

以上で、Android起動時にBroadcastReceiverのonReceiveが呼ばれるようになります。

[Android SDK] 画面ON/OFFを検知する

画面の電源ON/OFF時にはインテントが発行されますので、BroadcastReceiverを利用して受け取るようにします。 まずは、受け取るためにBroadcastReceiverを作成します。作成したActivityもしくはService内に作成すると良い。
// ブロードキャストリスナー
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
 @Override
 public void onReceive(Context context, Intent intent) {
  String action = intent.getAction();
  if (action != null) {
   if (action.equals(Intent.ACTION_SCREEN_ON)) {
    // 画面ON時
    Log.d(TAG, "SCREEN_ON");
   } else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
    // 画面OFF時
    Log.d(TAG, "SCREEN_OFF");
   }
  }
 }
};
作成したBroadcastReceiverでインテントを受け取るには、IntentFilterを使い対象を登録する必要があります。 画面の電源ON/OFFでは次の二つを登録すると良い。
// リスナーの登録
Context c;
c.registerReceiver(broadcastReceiver, new IntentFilter(Intent.ACTION_SCREEN_ON));
c.registerReceiver(broadcastReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));
また、受信するActivityまたはServiceのIntentFilterにも追加する。

なお、不要になったときは登録を削除します。
// リスナーの登録削除
Context c;
c.unregisterReceiver(broadcastReceiver);

[Android SDK] 電話の着信を監視する

TelephonyManagerを利用すると、電話の着信/通話中/待機時を検知することができる。
まずはシステムサービスからTelephonyManagerを取得し、listenでリスナーを登録する。
※Permissonに"android.permission.READ_PHONE_STATE"の登録が必要。
// 電話状態監視リスナー
PhoneStateListener mListener = new PhoneStateListener() { 
 public void onCallStateChanged(int state, String number) {
  switch(state) {
  case TelephonyManager.CALL_STATE_RINGING:// 着信時
   Log.d(TAG, "PhoneState: CALL_STATE_RINGING");
   break;
  case TelephonyManager.CALL_STATE_OFFHOOK:// 通話時
   Log.d(TAG, "PhoneState: CALL_STATE_OFFHOOK");
   break;
  case TelephonyManager.CALL_STATE_IDLE:// 待機時(リスナー登録時も呼ばれるようだ)
   Log.d(TAG, "PhoneState: CALL_STATE_IDLE");
   break;
  }
 }
};
TelephonyManager m = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
m.listen(mListener, PhoneStateListener.LISTEN_CALL_STATE);
不在着信の検知は、前回の電話状態を記録することで可能です。
・通話終了=CALL_STATE_RINGING -> CALL_STATE_OFFHOOK -> CALL_STATE_IDLE
・不在着信=CALL_STATE_RINGING -> CALL_STATE_IDLE

2012年2月24日金曜日

[マルチタイマー ver.1.1.1] 初Androidアプリを公開

Androidアプリの開発を始め2ヶ月ほどでやっと、簡単ですがタイマーアプリが完成しましたので、Android Marketで公開しました。試しに使ってみてください。

【対応言語】英語、日本語
【動作確認】MEDIAS N-04C、Xperia SX

ストップウォッチ、キッチンタイマーの2つのタイマーが使えます。
タイマーの切替はタブでき同時に使えます。

■ストップウォッチ
ラップ機能付きのストップウォッチです。


■キッチンタイマー
アラーム通知は、他アプリ操作中でも、画面ロック中でも通知されます。


■設定変更
 ・タイマー使用時のバックライトを常時点灯できます。
 ・キッチンタイマーのアラーム音、アラーム時間など変更できます。
  など