Android中notification通知的Demo——震動,鈴聲,Led燈閃爍


這里要注意幾點:

1. notification的各種方法及參數的應用

2. 舊版本的SDK和新版本的SDK消息推送的寫法是有些不一樣的

 

1. notification的各種方法及參數的應用

 (1)消息提示音

 /**
  * sound屬性是一個 Uri 對象。 可以在通知發出的時候播放一段音頻,這樣就能夠更好地告知用戶有通知到來.
   * 如:手機的/system/media/audio/ringtones 目錄下有一個 Basic_tone.ogg音頻文件,
   * 可以寫成: Uri soundUri = Uri.fromFile(new
   * File("/system/media/audio/ringtones/Basic_tone.ogg"));
   * notification.sound = soundUri; 我這里為了省事,就去了手機默認設置的鈴聲
    */
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
notification.sound = uri;

(2)LED燈閃爍

/**
  * 手機處於鎖屏狀態時, LED燈就會不停地閃爍, 提醒用戶去查看手機,下面是綠色的燈光一 閃一閃的效果
   */
notification.ledARGB = Color.GREEN;// 控制 LED 燈的顏色,一般有紅綠藍三種顏色可選
notification.ledOnMS = 1000;// 指定 LED 燈亮起的時長,以毫秒為單位
notification.ledOffMS = 1000;// 指定 LED 燈暗去的時長,也是以毫秒為單位
notification.flags = Notification.FLAG_SHOW_LIGHTS;// 指定通知的一些行為,其中就包括顯示
                

(3) 手機震動

/**
  * vibrate屬性是一個長整型的數組,用於設置手機靜止和振動的時長,以毫秒為單位。
   * 參數中下標為0的值表示手機靜止的時長,下標為1的值表示手機振動的時長, 下標為2的值又表示手機靜止的時長,以此類推。
   */
long[] vibrates = { 0, 1000, 1000, 1000 };
notification.vibrate = vibrates;

(4)Pendingintent

網上描述:PendingIntent 可以看作是對intent的包裝,通常通過getActivity,getBroadcast ,getService來得到pendingintent的實例,當前activity並不能馬上啟動它所包含的intent,而是在外部執行 pendingintent時,調用intent的。正由於pendingintent中 保存有當前App的Context,使它賦予外部App一種能力,使得外部App可以如同當前App一樣的執行pendingintent里的 Intent, 就算在執行時當前App已經不存在了,也能通過存在pendingintent里的Context照樣執行Intent。另外還可以處理intent執行后的操作。常和alermanger 和notificationmanager一起使用。Intent一般是用作Activity、Sercvice、BroadcastReceiver之間傳遞數據,而Pendingintent,一般用在 Notification上,可以理解為延遲執行的intent,PendingIntent是對Intent一個包裝。

是不是看得稀里糊塗?個人理解,就是PendingIntent將創建的intent的包裝起來,並不是現在啟動,而是當你點擊消息欄的消息提示后跳轉,上面說當前App已經不存在,也能通過存在pendingintent里的context執行intent的,但當前我所舉的例子是不行的,因為當前app銷毀后,消息欄里的提示消息也會消失。

 

2. 舊版本的SDK和新版本的SDK消息推送的寫法是有些不一樣的

舊版本是可以通過notification.setLatestEventInfo()來寫消息通知的,但新版本這么寫會報錯。因為新版本setLatestEventInfo()方法里多了句@removed,所以這種方法是在新版本里用不了。我用的SDK版本是25,大概從23版開始就用不了該方法了吧。

 

下面分別用兩種方法示例:

(1)舊方法

/**
             * 創建通知管理類NotificationManager的實例,用來管理通知
             */
            NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

            /**
             * 創建通知類Notification實例(用來存儲通知所需的信息); 一共三個參數:
             * 1)、指定通知使用的圖標,如:R.drawable.ic_launcher ;
             * 2)、指定通知的ticker內容,通知被創建的時候,在狀態欄一閃而過,屬於瞬時提示信息。
             * 3)、指定通知被創建的時間,以毫秒為單位,下拉狀態欄時,這個時間會顯示在相應的通知上。
             */
            Notification notification = new Notification(
                    R.drawable.ic_launcher, "有通知來了", System.currentTimeMillis());

            /**
             * 手機設置的默認提示音
             */
            Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
            /**
             * sound屬性是一個 Uri 對象。 可以在通知發出的時候播放一段音頻,這樣就能夠更好地告知用戶有通知到來.
             * 如:手機的/system/media/audio/ringtones 目錄下有一個 Basic_tone.ogg音頻文件,
             * 可以寫成: Uri soundUri = Uri.fromFile(new
             * File("/system/media/audio/ringtones/Basic_tone.ogg"));
             * notification.sound = soundUri; 我這里為了省事,就去了手機默認設置的鈴聲
             */
             notification.sound = uri;

            /**
             * vibrate屬性是一個長整型的數組,用於設置手機靜止和振動的時長,以毫秒為單位。
             * 參數中下標為0的值表示手機靜止的時長,下標為1的值表示手機振動的時長, 下標為2的值又表示手機靜止的時長,以此類推。
             */
             long[] vibrates = { 0, 1000, 1000, 1000 };
             notification.vibrate = vibrates;

            /**
             * 手機處於鎖屏狀態時, LED燈就會不停地閃爍, 提醒用戶去查看手機,下面是綠色的燈光一 閃一閃的效果
             */
            notification.ledARGB = Color.GREEN;// 控制 LED 燈的顏色,一般有紅綠藍三種顏色可選
            notification.ledOnMS = 1000;// 指定 LED 燈亮起的時長,以毫秒為單位
            notification.ledOffMS = 1000;// 指定 LED 燈暗去的時長,也是以毫秒為單位
            notification.flags = Notification.FLAG_SHOW_LIGHTS;// 指定通知的一些行為,其中就包括顯示
                                                                // LED 燈這一選項

            /**
             * 如果不想進行那么多繁雜的設置,也可以直接使用通知的默認效果,它會根據當前手機的環境來決定播放什么鈴聲,以及如何振動
             */
            // notification.defaults = Notification.DEFAULT_ALL;

            /**
             * 實例化Intent,構建意圖:從當前頁面條狀到NotificationActivity頁面
             */
            Intent intent = new Intent(this, NotificationActivity.class);

            /**
             * 用於啟動活動、啟動服務以及發送廣播等。 根據需求來選擇是使用
             * getActivity()方法、getBroadcast()方法、還是 getService() 方法。 一共四個參數:
             * 1)、第一個參數是 上下文Context ; 2)、 第二個參數一般用不到,通常都是傳入 0 即可 3)、第三個參數是一個
             * Intent對象,我們可以通過這個對象構建出 PendingIntent 的“意圖”; 4)、第四個參數用於確定
             * PendingIntent 的行為
             */
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                    intent, PendingIntent.FLAG_CANCEL_CURRENT);

            /**
             * 設定通知標准的布局。四個參數: 1)、上下文對象Context; 2)、指定通知的標題內容,下拉系統狀態欄可看到;
             * 3)、指定通知的正文,下拉系統狀態欄可看到; 4)、用於啟動活動、啟動服務以及發送廣播
             */
            notification.setLatestEventInfo(this, "股票大漲", "今日萬科的股票停牌,應對惡意收購",
                    pendingIntent);

            /**
             * 啟動通知. 兩個參數: 1)、id,保證每個通知的id唯一; 2)、Notification對象
             */
            manager.notify(1, notification);

(2)新方法

新的版本中官方建議用 Notification.Builder來創建 notification 實例

  NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                Notification.Builder builder = new Notification.Builder(this);
                builder.setContentInfo("補充內容");
                builder.setContentText("主內容區");
                builder.setContentTitle("通知標題");
                builder.setSmallIcon(R.drawable.ic_launcher);
                builder.setTicker("新消息");
                builder.setAutoCancel(true);

                builder.setWhen(System.currentTimeMillis());//設置時間,設置為系統當前的時間
                Intent intent = new Intent(this, NotificationActivity.class);
                PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
                builder.setContentIntent(pendingIntent);
                Notification notification = builder.build();
                /**
                 * vibrate屬性是一個長整型的數組,用於設置手機靜止和振動的時長,以毫秒為單位。
                 * 參數中下標為0的值表示手機靜止的時長,下標為1的值表示手機振動的時長, 下標為2的值又表示手機靜止的時長,以此類推。
                 */
                long[] vibrates = { 0, 1000, 1000, 1000 };
                notification.vibrate = vibrates;
                
                /**
                 * 手機處於鎖屏狀態時, LED燈就會不停地閃爍, 提醒用戶去查看手機,下面是綠色的燈光一 閃一閃的效果
                 */
                notification.ledARGB = Color.GREEN;// 控制 LED 燈的顏色,一般有紅綠藍三種顏色可選
                notification.ledOnMS = 1000;// 指定 LED 燈亮起的時長,以毫秒為單位
                notification.ledOffMS = 1000;// 指定 LED 燈暗去的時長,也是以毫秒為單位
                notification.flags = Notification.FLAG_SHOW_LIGHTS;// 指定通知的一些行為,其中就包括顯示
                // LED 燈這一選項



//                Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
//                notification.sound = uri;
//                notification.defaults = Notification.DEFAULT_ALL;
                manager.notify(1, notification);

 源碼地址:

http://download.csdn.net/detail/u013293125/9736575


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM