點擊按鈕“發送通知(標準)”,發送標準定義的通知
點擊按鈕“發送通知(自訂)”,發送自訂的通知
點擊按鈕“清除所有通知”,清除的通知
廢話少說,直接看代碼:
activity_main.xml介面代碼:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"><Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="發出通知(標準)" android:id="@+id/btn1" /><Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="發出通知(自訂)" android:id="@+id/btn2" /><Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="清除所有通知" android:id="@+id/btn3" /></LinearLayout>
my.xml代碼:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ProgressBar android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="100" android:progress="0" style="?android:attr/progressBarStyleHorizontal" android:id="@+id/my_progress" /></LinearLayout>
MainActivity.java代碼:
package com.example.notificationdemo;import java.util.ArrayList;import java.util.Random;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RemoteViews;public class MainActivity extends Activity {/* * * Notification通知,是Android資訊提示的手段之一 * 標準的通知 * 自訂通知 *///ids用來儲存通知的idArrayList<Integer> ids=new ArrayList();int index=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btn1=(Button)findViewById(R.id.btn1);Button btn2=(Button)findViewById(R.id.btn2);Button btn3=(Button)findViewById(R.id.btn3);btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//1.建立通知對象//參數1,是通知表徵圖,參數2,是通知標題,參數3,通知發出的時間Notification notification=new Notification(R.drawable.ic_launcher, "這是一個測試通知",System.currentTimeMillis());//2.設定通知的內容主體//PendingIntent是一個用於儲存狀態的意圖//由於通知可以脫離程式(發出之後將程式結束),所以我們需要一個對象來維持通知和程式之間的關係PendingIntent pending=PendingIntent.getActivity(MainActivity.this, 1, new Intent(MainActivity.this,MainActivity.class), 0);notification.setLatestEventInfo(MainActivity.this, "通知標題", "這條資訊是標準通知",pending);//設定通知不可被清除|被點擊之後自動清除notification.flags=Notification.FLAG_NO_CLEAR|Notification.FLAG_AUTO_CANCEL;//3.通過通知管理器將該通知發出//NotificationManager是系統服務,可用來發送全域通知NotificationNotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);Random rd= new Random();//這個id表示通知的標識int id=rd.nextInt();manager.notify(id, notification);ids.add(id);}});//自訂通知btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {final Notification notification=new Notification(R.drawable.ic_launcher, "這是自訂的通知", System.currentTimeMillis());RemoteViews rv=new RemoteViews(MainActivity.this.getPackageName(), R.layout.my);notification.contentView=rv;notification.contentIntent=PendingIntent.getActivity(MainActivity.this, 1, new Intent(MainActivity.this,MainActivity.class), 0);notification.flags=Notification.FLAG_NO_CLEAR|Notification.FLAG_AUTO_CANCEL;final NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);manager.notify(1, notification);//啟動一個任務,類比進度new Thread(){public void run(){while(index<100){notification.contentView.setProgressBar(R.id.my_progress, 100,index, false);index++;try{sleep(new Random().nextInt(201)+300);}catch(Exception e){e.printStackTrace();}//更新通知資訊,id相同情況下覆蓋老資訊manager.notify(1, notification);}}}.start();}});//清除所有儲存的通知btn3.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);for(int i=0;i<ids.size();i++){manager.cancel(ids.get(i));}}});}}
注釋寫的挺詳細的了,如有疑問,歡迎留言