なお、今回のサンプルプログラムはAPI Level 14 (Android 4.0)以降を対象としています。
NotificationTest7aActivity.java
package jp.co.triware.samples.NotificationTest7a;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class NotificationTest7aActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final NotificationManager notifMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
final Notification.Builder notifBuilder = new Notification.Builder(this); // API Level 11
final EditText etTickerText = (EditText)findViewById(R.id.tickerText_et);
final EditText etContentText = (EditText)findViewById(R.id.contentText_et);
Button btnNotify = (Button)findViewById(R.id.notify_btn);
btnNotify.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// ステータスバーと通知エリアに表示する内容を取得
int icon = R.drawable.ic_launcher; // アイコン
String tickerText = etTickerText.getText().toString(); // テキスト(ステータスバー)
long when = System.currentTimeMillis(); // 時刻
String contentTitle = getString(R.string.app_name); // タイトル
String contentText = etContentText.getText().toString(); // 完了時の通知メッセージ
// 取得した値をセット
notifBuilder.setSmallIcon(icon);
notifBuilder.setTicker(tickerText);
notifBuilder.setWhen(when);
notifBuilder.setContentTitle(contentTitle);
notifBuilder.setContentText(contentText);
// プログレスバー表示用のスレッド
new Thread(new Runnable() {
@Override
public void run() {
// バーの表示
for (int i = 0; i <= 100; i ++) {
notifBuilder.setProgress(100, i, false); // API Level 14
notifMgr.notify(R.string.app_name, notifBuilder.getNotification());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
;
}
}
// 完了時の通知
notifBuilder.setProgress(0, 0, false); // API Level 14
notifMgr.notify(R.string.app_name, notifBuilder.getNotification());
}
}).start();
}
});
}
}
19行目のNotification.BuilderはAndroid 3.0 (API Level 11)で追加されました。また、46行目と55行目のsetProgress()メソッドはAndroid 4.0 (API Level 14)で追加されました。これらを使うために、今回はAndroid 4.0以降を対象としています。
46行目のsetProgress()で、0~100%のプログレスバーを表示します。処理が終わったら、55行目でプログレスバーを消します。
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<EditText
android:id="@+id/tickerText_et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Ticker Text"
/>
<EditText
android:id="@+id/contentText_et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Content Text"
/>
<Button
android:id="@+id/notify_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Notify"
/>
</LinearLayout>
Androidプロジェクトの設定
ビルドターゲットや最小SDKバージョンは、『Android 4.0 (API Level 14)以降』を指定してください。
プロジェクト名: NotificationTest7a アプリケーション名: NotificationTest7a パッケージ名: jp.co.triware.samples.NotificationTest7a アクティビティーの作成: NotificationTest7aActivity
実行結果
いつものようにテキストを入力してNotifyボタンをクリックします。
ステータスバーにアイコンが表示されたので、、、
通知エリアを開くと、プログレスバーが表示されて、バーが進んでいます。
処理が終わるとプログレスバーが消えました。
今回はAndroid 4.0用のサンプルでしたが、実はそれ以前のバージョンでも実現できます。これについてはまた別の機会にご紹介する予定です。




0 件のコメント:
コメントを投稿