Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之使用Notification.Builder

Android開發之使用Notification.Builder

編輯:關於Android編程

通知的主要功能是提示功能。例如:短信、推送信息等等。


大體使用步驟:

1.獲取狀態通知欄管理

NotificationManager 是一個系統Service,所以必須通過 getSystemService(NOTIFICATION_SERVICE)方法來獲取。

 

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

 

 

 

2.實例化通知欄構造器NotificationCompat.Builder

3.設置NotificationCompat.Builder

4.設置PendingIntent

5.顯示

 

方法或參數介紹:

1.PendingIntent

PendingIntent.getBroadcast(context, requestCode, intent, flags)

PendingIntent.getActivities(context, requestCode, intents, flags)

PendingIntent.getService(context, requestCode, intent, flags)

中的flags屬性參數:

 

 

FLAG_ONE_SHOT 表示返回的PendingIntent僅能執行一次,執行完後自動取消

FLAG_NO_CREATE 表示如果描述的PendingIntent不存在,並不創建相應的PendingIntent,而是返回NULL

FLAG_CANCEL_CURRENT 表示相應的PendingIntent已經存在,則取消前者,然後創建新的PendingIntent

FLAG_UPDATE_CURRENT 表示更新的PendingIntent

 

 

2.notification.flags參數介紹

 

Notification.FLAG_SHOW_LIGHTS //三色燈提醒,在使用三色燈提醒時候必須加該標志符

Notification.FLAG_ONGOING_EVENT //發起正在運行事件(活動中)

Notification.FLAG_INSISTENT //讓聲音、振動無限循環,直到用戶響應 (取消或者打開)

Notification.FLAG_ONLY_ALERT_ONCE //發起Notification後,鈴聲和震動均只執行一次

Notification.FLAG_AUTO_CANCEL //用戶單擊通知後自動消失

Notification.FLAG_NO_CLEAR //只有全部清除時,Notification才會清除 ,不清楚該通知(QQ的通知無法清除,就是用的這個)

 

Notification.FLAG_FOREGROUND_SERVICE //表示正在運行的服務

 

使用方法:

 

在設置完屬性後,設置

Notification notification =builder.build();
notification.flags =Notification.FLAG_ONLY_ALERT_ONCE;

 

3.setVibrate(long[] pattern)

設置震動,需要權限.

 


4.builder.setOngoing( )

設置為ture,表示它為一個正在進行的通知。簡單的說,當為ture時,不可以被側滑消失。

 

***************************************************************************************

使用自定義Notification,就要使用RemoteViews。

***************************************************************************************

 

使用實例:

圖片:

\ \ \

 

實現代碼:

MainActivity.java

public class MainActivity extends Activity {

	Button button, button2;
	NotificationManager notificationManager;
	public final static String NEWS_LISTEN = "broadcast";

	// 用於自定義Notification,點擊事件的驗證
	String remoteViewsText = "未點擊";

	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

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

		IntentFilter filter = new IntentFilter();
		filter.addAction(NEWS_LISTEN);
		this.registerReceiver(broadcastReceiver, filter);

	}

	public void click(View v) {

		switch (v.getId()) {
		case R.id.but:// 使用普通的Notification

			Notification.Builder builder = new Notification.Builder(
					MainActivity.this);

			Intent intent = new Intent(MainActivity.this, SecondActivity.class);
			PendingIntent pendingIntent = PendingIntent.getActivity(
					MainActivity.this, 0, intent,
					PendingIntent.FLAG_UPDATE_CURRENT);

			builder.setContentIntent(pendingIntent);
			builder.setSmallIcon(R.drawable.close);// 設置圖標
			builder.setWhen(System.currentTimeMillis());// 設置通知來到的時間
			// builder.setAutoCancel(true);
			builder.setContentTitle("標題");// 設置通知的標題
			builder.setContentText("內容");// 設置通知的內容
			builder.setTicker("狀態欄上顯示");// 狀態欄上顯示
			builder.setOngoing(true);

			/*
			 * // 設置聲音(手機中的音頻文件) String path =
			 * Environment.getExternalStorageDirectory() .getAbsolutePath() +
			 * "/Music/a.mp3"; File file = new File(path);
			 * builder.setSound(Uri.fromFile(file));
			 */

			// 獲取Android多媒體庫內的鈴聲
			builder.setSound(Uri.withAppendedPath(
					Audio.Media.INTERNAL_CONTENT_URI, "5"));

			// builder.setVibrate(new long[]{2000,1000,4000}); //需要真機測試
			Notification notification = builder.build();
			// notification.flags =Notification.FLAG_ONGOING_EVENT;

			notificationManager.notify(0, notification);

			break;

		case R.id.but2:// 使用自定義的Notification
			// 3.0之前不支持Button
			MyNotification();

			break;

		case R.id.but3:// 使用下載的Notification,在4.0以後才能使用

			final Notification.Builder builder3 = new Notification.Builder(
					MainActivity.this);
			builder3.setSmallIcon(R.drawable.ic_launcher)
					.setTicker("showProgressBar").setContentInfo("contentInfo")
					.setOngoing(true).setContentTitle("ContentTitle")
					.setContentText("ContentText");
			// 模擬下載過程
			new Thread(new Runnable() {
				@Override
				public void run() {

					int progress = 0;

					for (progress = 0; progress < 100; progress += 5) {
						// 將setProgress的第三個參數設為true即可顯示為無明確進度的進度條樣式
						builder3.setProgress(100, progress, false);

						notificationManager.notify(0, builder3.build());
						try {
							Thread.sleep(1 * 1000);
						} catch (InterruptedException e) {
							System.out.println("sleep failure");
						}
					}
					builder3.setContentTitle("Download complete")
							.setProgress(0, 0, false).setOngoing(false);
					notificationManager.notify(0, builder3.build());

				}
			}).start();

			break;
		case R.id.but4:// 大布局通知在4.1以後才能使用,BigTextStyle

			Notification.BigTextStyle textStyle = new Notification.BigTextStyle();
			textStyle.setBigContentTitle("大標題")
					// 標題
					.setSummaryText("SummaryText")
					.bigText(
							"Big Text!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
									+ "!!!!!!!!!!!"
									+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");// 內容
			Notification.Builder builder2 = new Notification.Builder(
					MainActivity.this);
			builder2.setSmallIcon(R.drawable.icon);// 小圖標
			// 大圖標
			builder2.setLargeIcon(BitmapFactory.decodeResource(
					this.getResources(), R.drawable.close));
			builder2.setTicker("showBigView_Text")
					.setContentInfo("contentInfo");
			builder2.setStyle(textStyle);
			builder2.setAutoCancel(true);

			notificationManager.notify(0, builder2.build());

			break;

		case R.id.but5://大布局通知在4.1以後才能使用,大布局圖片
			
			Notification.BigPictureStyle bigPictureStyle = new Notification.BigPictureStyle();
			bigPictureStyle.bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.back));
			
			Notification.Builder builder4 = new Notification.Builder(
					MainActivity.this);
			builder4.setSmallIcon(R.drawable.icon);// 小圖標
			// 大圖標
			builder4.setLargeIcon(BitmapFactory.decodeResource(
					this.getResources(), R.drawable.close));
			builder4.setTicker("showBigView_Picture")
					.setContentInfo("contentInfo");
			builder4.setStyle(bigPictureStyle);
			builder4.setAutoCancel(true);

			notificationManager.notify(0, builder4.build());
			
			break;
			
		case R.id.but6://大布局通知在4.1以後才能使用,InboxStyle
			
			Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
			inboxStyle.setBigContentTitle("InboxStyle");
			inboxStyle.setSummaryText("Test");
			for(int i =0 ;i<5;i++){
				inboxStyle.addLine("new:"+i);
			}
			
			Notification.Builder builder5 = new Notification.Builder(
					MainActivity.this);
			builder5.setSmallIcon(R.drawable.icon);// 小圖標
			// 大圖標
			builder5.setLargeIcon(BitmapFactory.decodeResource(
					this.getResources(), R.drawable.close));
			builder5.setTicker("showBigView_InboxStyle")
					.setContentInfo("contentInfo");
			builder5.setStyle(inboxStyle);
			builder5.setAutoCancel(true);

			notificationManager.notify(0, builder5.build());
			
			
			break;

		}

	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		// 取消廣播接收
		this.unregisterReceiver(broadcastReceiver);
	}

	/**
	 * 自定義Notification
	 */
	public void MyNotification() {

		RemoteViews remoteViews = new RemoteViews(getPackageName(),
				R.layout.form);
		remoteViews.setTextViewText(R.id.tv_form, remoteViewsText);

		Intent intent2 = new Intent(MainActivity.NEWS_LISTEN);

		// 使用廣播,所以INTENT必須用getBroadcast方法
		PendingIntent pendingIntent2 = PendingIntent.getBroadcast(
				MainActivity.this, 1, intent2,
				PendingIntent.FLAG_UPDATE_CURRENT);

		// 綁定
		remoteViews.setOnClickPendingIntent(R.id.but_form, pendingIntent2);

		Notification.Builder builderMain = new Notification.Builder(
				MainActivity.this);

		builderMain
				.setContent(remoteViews)
				.setSmallIcon(R.drawable.icon)
				.setLargeIcon(
						BitmapFactory.decodeResource(this.getResources(),
								R.drawable.open)).setOngoing(true)
				.setTicker("music is playing");
		notificationManager.notify(0, builderMain.build());
	}

	// 廣播接收器(自定義Notification使用到)
	BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

		@Override
		public void onReceive(Context c, Intent intent) {

			if (intent.getAction().equals(NEWS_LISTEN)) {

				remoteViewsText = "已點擊";
				MyNotification();

			}
		}
	};
}

 

activity_main.xml

 

form.xml(自定義通知的樣式)



SecondActivity.java 只是一個activity。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved