android中notification的使用 (包括線程、progressbar的使用)

在android運用中,經常可以看到在下載東西的時候可以有個進度條的玩意兒顯示在狀態欄中。

參考網上的資料後,自己動手做了一個,結構不一定科學,但是功能確實是實現了。

首先是兩個xml文件:

第一個是主頁面,上面只有一個按鈕而已。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent" android:weightSum="1">
	<Button android:text="Notification" android:id="@+id/button1"
		android:layout_width="match_parent" android:layout_height="wrap_content"></Button>

</LinearLayout>

第二個xml頁面,包括一個imageview、progressbar、textview。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal" android:layout_width="fill_parent"
	android:layout_height="fill_parent" android:weightSum="1">
	<ImageView android:id="@+id/imageView1"
		android:layout_height="wrap_content" android:layout_width="wrap_content"
		android:src="@drawable/icon"></ImageView>
	<ProgressBar style="?android:attr/progressBarStyleHorizontal"
		android:layout_height="wrap_content" android:layout_width="180dip"
		android:id="@+id/progressBar1" android:layout_marginTop="13dip" ></ProgressBar>
	<TextView android:text="TextView" android:layout_height="wrap_content"
		android:id="@+id/textView1" android:layout_width="wrap_content"
		android:textSize="12sp" android:layout_marginTop="13dip"></TextView>

</LinearLayout>
其次是兩個java文件

ForAndroidActivity.java

package fover.dialog;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RemoteViews;

public class ForAndroidActivity extends Activity implements OnClickListener {

	private NotificationManager manager;
	private RemoteViews view;
	private Notification notification;
	private PendingIntent pIntent;
	private final static int RUN = 1;
	private final static int STOP = 0;
	private int progressNumber = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.notify);
		// 取得notification的服務,這樣才能控制它撒
		manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
		// new一個notification來設置它的發生時間,一般用當前時間。
		notification = new Notification(R.drawable.icon, "這裏顯示您第一眼看到這個消息的信息",
				System.currentTimeMillis());
		// 將另一個用來顯示在通知欄上的layout加載進來
		view = new RemoteViews(getPackageName(), R.layout.main);
		// 設置點擊通知欄後需要啓動的activity
		Intent intent = new Intent(ForAndroidActivity.this, Text.class);
		// 設置PendingIntent,需要注意的是這裏使用的是getActivity這個方法
		pIntent = PendingIntent.getActivity(ForAndroidActivity.this, 0, intent,
				0);
		// 發現按鈕並且設置監聽事件
		Button button1 = (Button) findViewById(R.id.button1);
		button1.setOnClickListener(this);

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			// new一個線程用於發送消息
			new Thread(new Runnable() {

				@Override
				public void run() {
					for (int i = 0; i < 20; i++) {
						progressNumber = (i + 1) * 5;
						try {
							if (i < 19) {
								Message msg = new Message();
								msg.what = RUN;
								myHandler.sendMessage(msg);
								Thread.sleep(1000);

							} else {
								Message msg = new Message();
								msg.what = STOP;
								myHandler.sendMessage(msg);
								Thread.currentThread().interrupt();
							}

						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}
			}).start();
			break;

		default:
			break;
		}

	}

	// new一個handler來接收處理消息,並且更新界面。
	private Handler myHandler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case RUN:
				// 注意此法,可以用來設置加載進來的那個view的頁面元素
				view.setProgressBar(R.id.progressBar1, 100, progressNumber,
						false);
				view.setTextViewText(R.id.textView1, "下載完成" + progressNumber
						+ "%");
				notification.contentView = view;
				notification.contentIntent = pIntent;
				manager.notify(0, notification);

				break;
			case STOP:
				notification.icon = R.drawable.icon;
				notification.setLatestEventInfo(ForAndroidActivity.this,
						"下載完成", "您下載的ABS130已經下載完了", pIntent);
//				進度條完成之後發出提示聲音
				notification.defaults=Notification.DEFAULT_SOUND;
				manager.notify(0, notification);
			default:
				break;
			}
			super.handleMessage(msg);
		}

	};

}

另一個文件text.java

package fover.dialog;

import android.app.Activity;
import android.os.Bundle;

public class Text extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//國際慣例,加載layout文件
		setContentView(R.layout.main);
	}

}


運行效果:

發佈了24 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章