Notification 通知

      此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();
        }
    }
}

運行截圖:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章