libro
www.tuyano.com
Google androidプログラミング入門

ノーティフィケーションの利用 (4/5)

作成:2011-10-10 10:39
更新:2011-10-10 10:39

■ノーティフィケーションの活用

ノーティフィケーションは、細かな使い方がわかるとさまざまなことに応用できるようになります。最後に、ノーティフィケーションの活用についていくつか整理しておきましょう。


■表示の更新
ノーティフィケーションの表示が状況に応じて変化するようなアプリがありますが、これはノーティフィケーションそのものを直接操作しているわけではありません。

下に簡単なサンプルを挙げておきました。ボタンを御押してdoActionを呼び出すと、赤い「1」の数字が表示されたアイコンがステータスバーに表示されます。再度クリックすると数字が2,3……と増えていきます。

ここではnotifynumberの値を変更してから、setLatestEventInfoを実行し、notifyしています。このように表示を更新する場合には、Notificationの設定を変更した後、setLatestEventInfoで組み込み、notifyする、という手順になります。Notificationインスタンスそのものは使い回しでかまいません。要は「改めて登録しなおす」ことが肝心です。


■「実行中」の表示
ノーティフィケーションは、よく見ると一般のアプリによるものとは別に「実行中」という項目に表示されるものがあります。これは、サービスなどで処理が実行中の場合に用いられます。が、サービスからノーティフィケーションを発行すれば自動的にここに表示されるというわけではありません。

「実行中」に表示させるには、flagに「FLAG_ONGOING_EVENT」を追加してやります。以下のような一文を追加してやることで、「実行中」にすることができます。
【Notification】.flags += Notification.FLAG_ONGOING_EVENT;

■クリアされないノーティフィケーション
ノーティフィケーションは、基本的に「クリックして選択すると消える」というものですが、中には常に表示され続けていて、クリックしても消えないものというのもあります。こうしたものは、flagsに「FLAG_NO_CLEAR」を設定します。例えば、以下のような形ですね。
【Notification】.flags += Notification.FLAG_NO_CLEAR;
では、このクリアされなノーティフィケーションは、どうやって消せばいいのでしょうか。これは、NotificationManagerの「cancel」メソッドを用います。これを使い、引数にノーティフィケーションに割り当てたIDを指定してキャンセルします。
【NotificationManager】.cancel( ノーティフィケーションID );

――とりあえず、こうしたノーティフィケーションの使い方を色々と覚えていけば、「単純にメッセージを表示する」というだけのことしかできないノーティフィケーションも、応用の仕方がわかってくることでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※表示を更新する

public class MySampleActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	private int counter = 1;
	
	private Notification notify = null;
	private PendingIntent pending = null;
	
	public void doAction(View view){
		if (notify == null){
			Intent intent = new Intent(this,jp.tuyano.sample.MySampleActivity.class);
			pending = PendingIntent.getActivity(this, 0, 
					intent, PendingIntent.FLAG_CANCEL_CURRENT);
			notify = new Notification();
		}
		notify.flags = Notification.FLAG_AUTO_CANCEL;
		notify.icon = R.drawable.icon;
		notify.number = counter++;
		notify.setLatestEventInfo(this, "TEST INFO", 
				"テストのノーティフィケーションです。", pending);
		NotificationManager manager = (NotificationManager)this.
				getSystemService(Activity.NOTIFICATION_SERVICE);
		manager.notify(0, notify);
	}
}
※関連コンテンツ

「Google androidプログラミング入門」に戻る