Android Notification的使用

今天使用4.0.3使用android

Notification notification2 = new Notification(R.drawable.advise2,  
"通知測試",
System.currentTimeMillis()); notification2.setLatestEventInfo(getActivity(), "testTitle", "testContent", null);ide

結果androidstudio報錯,setLatestEventInfo該方法找不到,通過查證官方在API Level 11中,該函數已經被替代,不推薦使用了。因此在4.0.3平臺也就是API Level 15中,使用Notification的setLatestEventInfo()函數時,顯示setLatestEventInfo()效果。建議使用Notification.Builder來建立 notification 實例函數

Notification.Builder builder1 = new Notification.Builder(MainActivity.this);
builder1.setSmallIcon(R.drawable.advise2); //設置圖標
builder1.setTicker("顯示第二個通知"); 
builder1.setContentTitle("通知"); //設置標題
builder1.setContentText("點擊查看詳細內容"); //消息內容
builder1.setWhen(System.currentTimeMillis()); //發送時間
builder1.setDefaults(Notification.DEFAULT_ALL); //設置默認的提示音,振動方式,燈光
builder1.setAutoCancel(true);//打開程序後圖標消失
Intent intent =new Intent (MainActivity.this,Center.class);
PendingIntent pendingIntent =PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
builder1.setContentIntent(pendingIntent);
Notification notification1 = builder1.build();
notificationManager.notify(124, notification1); // 經過通知管理器發送通知

若是該通知只是起到 「通知」的做用,不但願用戶點擊後有相應的跳轉,那麼,intent,pendingIntent這幾行代碼能夠不寫測試

Notification.Builder builder = new Notification.Builder(MainActivity.this);
builder.setSmallIcon(R.drawable.advise);
 builder.setTicker("顯示第一個通知");
builder.setContentTitle("第一個通知");
builder.setContentText("天天進步一點點");
builder.setWhen(System.currentTimeMillis()); //發送時間
builder.setDefaults(Notification.DEFAULT_ALL);
Notification notification = builder.build();
notificationManager.notify(123, notification);

第一個具備點擊提示有跳轉功能,後面一個沒有跳轉功能,只是提示做用ui

如下借鑑其餘博主的總結:
    低於API Level 11版本,也就是Android 2.3.3如下的系統中,setLatestEventInfo()函數是惟一的實現方法。前面的有關屬性設置這裏就再也不提了,網上資料不少。this

Intent  intent = new Intent(this,MainActivity);  
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);  
notification.setLatestEventInfo(context, title, message, pendingIntent);          
manager.notify(id, notification); spa

    高 於API Level 11,低於API Level 16 (Android 4.1.2)版本的系統中,可以使用 Notification.Builder來構造函數。但要使用getNotification()來使notification實現。此時,前面版本在 notification中設置的Flags,icon等屬性都已經無效,要在builder裏面設置。事件

Notification.Builder builder = new Notification.Builder(context)  
            .setAutoCancel(true)  
            .setContentTitle("title")  
            .setContentText("describe")  
            .setContentIntent(pendingIntent)  
            .setSmallIcon(R.drawable.ic_launcher)  
            .setWhen(System.currentTimeMillis())  
            .setOngoing(true);  
notification=builder.getNotification(); ip

    高於API Level 16的版本,就能夠用Builder和build()函數來配套的方便使用notification了。get

Notification notification = new Notification.Builder(context)    
         .setAutoCancel(true)    
         .setContentTitle("title")    
         .setContentText("describe")    
         .setContentIntent(pendingIntent)    
         .setSmallIcon(R.drawable.ic_launcher)    
         .setWhen(System.currentTimeMillis())    
         .build();  

    【注意點】:
    在構造notification的時候有不少種寫法,可是要注意,用
Notification notification = new Notification();
這種構建方法的時候,必定要加上notification.icon這個設置,否則,程序雖然不會報錯,可是會沒有效果。

Example:Notification的使用案例:

public class MainActivity extends Activity {

    private Button bt1;
    private NotificationManager notificationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);


        setViews();
        setlisteners();
    }

    private void setlisteners() {
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 發送通知
                Notification.Builder builder = new Notification.Builder(MainActivity.this);
                builder.setSmallIcon(R.mipmap.ic_launcher);
                builder.setTicker("this is ticker text"); // 通知的ticker內容,當通知剛建立的時候,它會在系統的狀態欄一閃而過
                builder.setContentTitle("this is title"); // 通知的標題
                builder.setContentText("this is content"); // 通知內容
                builder.setWhen(System.currentTimeMillis()); // 通知被建立的時間,以毫秒爲單位
                builder.setDefaults(Notification.DEFAULT_ALL); // 通知到來的時候,手機會發出振動、播放音樂、led燈亮的提示,具體是什麼的提示,由手機的設置決定

                Intent intent = new Intent(MainActivity.this,NotificationActivity.class);
                PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
                builder.setContentIntent(pendingIntent); // 響應通知的點擊事件
                Notification notification = builder.getNotification();
                notificationManager.notify(1, notification);
            }
        });
    }

    private void setViews() {
        bt1 = (Button)findViewById(R.id.bt1);
    }
}

NotificationActivity 通知的點擊事件的響應活動:

public class NotificationActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_notification);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancel(1); // // 取消通知  參數:爲建立通知的的通知id
}
}
相關文章
相關標籤/搜索