此demo實現了Notification通知,包括一個下載進度條示例。
demo:下載地址
源碼:
package fk.androiddemo_020;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity implements View.OnClickListener{
Button but,but2;
int notificationID;
Toast myToast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
but = (Button) findViewById(R.id.button);
but.setOnClickListener(this);
but2 = (Button) findViewById(R.id.button2);
but2.setOnClickListener(this);
notificationID=100;
//提前定義好的Toast
myToast=Toast.makeText(MainActivity.this, "下載完成", Toast.LENGTH_LONG);
}
@Override
public void onClick(View v) {
if(v==but){
newMessageNotification();
}else{
new downloadNotificationThread().start();
}
//通知的ID增加,防止新的通知覆蓋老的通知
notificationID++;
}
//下面一句使builder.build()在當前版本api(15)不報錯,這個函數本來是api16的
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void newMessageNotification(){
//創建通知管理器對象
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//創建Notification.Builder對象
Notification.Builder builder = new Notification.Builder(MainActivity.this);
//setSmallIcon這條屬性是builder唯一必須設置的
builder.setSmallIcon(R.mipmap.ic_launcher);//通知上的圖標(未展開時)
builder.setWhen(System.currentTimeMillis());//顯示在通知上的時間
builder.setTicker("新消息");//通知彈出時的提示內容(模擬器上看不到)
builder.setContentTitle("您有一條新消息!!");//通知的標題
builder.setContentText("您中了500萬大獎!!");//通知的內容
builder.setAutoCancel(true);//設置自動管理清除,例如點擊後刪除通知
Resources res = MainActivity.this.getResources();
//通知上的圖片(通知列表展開時,沒有時用SmallIcon代替),因爲這個圖片一般較大,用BitmapFactory處理參數
builder.setLargeIcon(BitmapFactory.decodeResource(res, R.mipmap.ic_launcher));
builder.setDefaults(Notification.DEFAULT_SOUND);//通知提示音
Intent intent = new Intent(MainActivity.this, TestActivity.class);//Intent對象
//封裝Intent對象
PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);//當通知被點擊時就會執行其中的Intent
Notification n=builder.build();//用builder生成通知Notification對象
nm.notify(notificationID, n);//顯示通知
}
class downloadNotificationThread extends Thread{
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(MainActivity.this);
int currentID=notificationID;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void run(){
builder.setWhen(System.currentTimeMillis());
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setTicker("開始下載");
builder.setContentTitle("BOBO正在下載");
for(int incr=0;incr<=100;incr+=5){//循環更新這條通知的內容
builder.setContentText("下載進度:"+incr+"%");
//爲通知添加進度條(總進度,當前進度,進度條樣式爲true時是一個無限循環條)
builder.setProgress(100,incr,false);
Notification n=builder.build();
nm.notify(currentID, n);
try {//暫停一秒模擬下載速度
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//下載完成後刪除通知
nm.cancel(currentID);
//顯示Toast,因爲這個類沒有繼承Activity,所以Toast在外面定義
myToast.show();
}
}
}
運行截圖: