Android通知- Android開發教學 - 極客書

文章推薦指數: 80 %
投票人數:10人

setContentText("Hi, This is Android Notification Detail!"); 通知有很多可選的屬性,可以設置。

要更多地了解它們,請參考NotificationCompat.Builder 文檔。

第 ... Java Python Ruby MySQL 位置:首頁>手機開發>Android開發教學>Android通知 Android開發教學 Android開發環境配置Android架構Android應用組件AndroidHelloWorld示例Android資源組織和訪問AndroidActivityAndroidServiceAndroid廣播接收器Android內容提供者Android碎片/片段AndroidIntent過濾器 高級教學 AndroidUI布局AndroidUI控件Android事件處理Android樣式和主題Android自定義組件Android拖放Android通知Android基於位置服務Android發送電子郵件Android發送短信/SMSAndroid撥打電話發布Android應用 實用實例 AndroidAlertdialog(警告對話框)AndroidAnimation(動畫)實例Android音頻捕獲(錄音)Android音頻管理器實例AndroidAutoCompleteTextView(自動完成)實例Android最佳實踐AndroidBluetooth(藍牙)實例AndroidCamera(攝像頭)AndroidClipboard(複製/剪貼板)Android自定義字體Android數據備份AndroidGestures/手勢Android圖片效果Android圖片切換Android內部存儲AndroidJetPlayer實例AndroidJSON解析器Android加載SpinnerAndroid本地化Android登錄實例AndroidMediaPlayer(多媒體播放) Android通知  上一篇 下一篇  Android的Toast 類提供了一個方便的方式來顯示用戶的警告信息,但這些警告不是持久性的,這意味著警告閃爍在屏幕上幾秒鐘後就消失了。

對於特彆重要的要提供給用戶的消息,需要有更持久性的方法。

Anotification是一種消息可以顯示在設備的頂部的通知欄或狀態欄中。

要看到通知的細節,選擇圖標顯示通知抽屜裡有詳細的有關通知。

模擬器虛擬設備工作,按一下向下拖動狀態欄將它展開,將顯示詳細信息如下。

這將是64sp高的普通視圖。

上述擴大的形式可以放到一個大的視圖,有關通知的更多細節。

可以添加最多六行的通知。

下麵的截圖顯示了這樣的通知。

創建和發送通知 使用簡單的方法來創建一個通知。

按照以下步驟在應用程序創建一個通知: 第1步-創建通知生成器 作為第一步創建一個通知構造器,使用NotificationCompat.Builder.build()。

使用通知Builder來設置屬性,如各種通知其小型和大型圖標,標題,優先級等。

NotificationCompat.BuildermBuilder=newNotificationCompat.Builder(this) 第2步-設置通知屬性 在創建Builder對象之後,可以按要求使用生成器創建通知對象。

這是強製性的,以至少下列設置: 一個小圖標,由 setSmallIcon() 設置 一個標題,由setContentTitle()設置 詳細內容由setContentText()設置 mBuilder.setSmallIcon(R.drawable.notification_icon); mBuilder.setContentTitle("NotificationAlert,ClickMe!"); mBuilder.setContentText("Hi,ThisisAndroidNotificationDetail!"); 通知有很多可選的屬性,可以設置。

要更多地了解它們,請參考NotificationCompat.Builder文檔。

第3步-動作附加 這是一個可選的部分,並要求如果要附加一個動作的通知。

動作可以讓用戶直接從通知到應用程序中的活動,在那裡它們可以在一個或多個事件,或做進一步的工作。

動作定義通過PendingIntent在應用程序中的活動意圖。

要關聯PendingIntent手勢請調用適當NotificationCompat.Builder方法。

例如,如果想開始活動,當用戶點擊通知文本通知抽屜PendingIntent調用setContentIntent()。

PendingIntent對象表示應用程序的執行一個動作,在以後的時間裡查看應用程序是否正在運行。

堆棧builder對象將包含一個人工後退堆棧活動。

確保向後導航的活動在應用程序的主屏幕。

IntentresultIntent=newIntent(this,ResultActivity.class); TaskStackBuilderstackBuilder=TaskStackBuilder.create(this); stackBuilder.addParentStack(ResultActivity.class); //AddstheIntentthatstartstheActivitytothetopofthestack stackBuilder.addNextIntent(resultIntent); PendingIntentresultPendingIntent= stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_UPDATE_CURRENT ); mBuilder.setContentIntent(resultPendingIntent); 第4步-發出通知 最後,調用NotificationManager.notify()發送通知,通知對象傳遞到係統。

通知之前,確保調用NotificationCompat.Builder.build()方法生成器對象。

這種方法結合了所有的選擇,設置並返回一個新的Notificationobject。

NotificationManagermNotificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); //notificationIDallowsyoutoupdatethenotificationlateron. mNotificationManager.notify(notificationID,mBuilder.build()); NotificationCompat.Builder類 NotificationCompat.Builder類可以更容易控製標誌,以及幫助構建典型通知布局。

以下是 NotificationCompat.Builder類的一些重要的和最常用的方法的一部分。

S.N. 常量&描述 1 Notificationbuild()  結合所有已設置的選項,並返回一個新的Notification 對象 2 NotificationCompat.BuildersetAutoCancel(booleanautoCancel)  設置此標誌將使它以便當用戶點擊它在麵板中的通知被自動取消 3 NotificationCompat.BuildersetContent(RemoteViewsviews)  提供定製RemoteViews使用來代替標準之一 4 NotificationCompat.BuildersetContentInfo(CharSequenceinfo)  設置大文本的通知的右側 5 NotificationCompat.BuildersetContentIntent(PendingIntentintent)  提供一個PendingIntent通知被點擊時發出 6 NotificationCompat.BuildersetContentText(CharSequencetext)  設置通知的文本(第二行),在一個標準的通知 7 NotificationCompat.BuildersetContentTitle(CharSequencetitle)  設置通知的文本(第一行),在一個標準的通知 8 NotificationCompat.BuildersetDefaults(intdefaults)  設置將要使用的默認通知選項 9 NotificationCompat.BuildersetLargeIcon(Bitmapicon)  設置顯示在自動收報機和通知大圖標 10 NotificationCompat.BuildersetNumber(intnumber)  在通知的右側設置大的數字 11 NotificationCompat.BuildersetOngoing(booleanongoing)  設置這是否是一個持續的通知 12 NotificationCompat.BuildersetSmallIcon(inticon)  設置小圖標在通知使用布局 13 NotificationCompat.BuildersetStyle(NotificationCompat.Stylestyle)  在構建時應用添加豐富的通知樣式 14 NotificationCompat.BuildersetTicker(CharSequencetickerText)  設置在第一個通知到達時顯示在狀態欄中的文本 15 NotificationCompat.BuildersetVibrate(long[]pattern)  設置振動模式的使用 16 NotificationCompat.BuildersetWhen(longwhen)  設置該事件發生的時間。

在麵板的通知是由這個時間進行排序 示例 以下示例顯示Android的通知功能,NotificationCompat.Builder類已在Android4.1中引入。

步驟 描述 1 使用AndroidStudio創建一個Android應用程序,並將它命名為:NotificationDemounder。

在創建這個項目時確保目標SDK和編譯在AndroidSDK的最新版本或更高級彆的API。

2 修改 src/MainActivity.java 文件,並添加定義三種方法startNotification(),cancelNotification()和updateNotification(),以涵蓋與Android的通知的最大功能的代碼。

3 創建一個新的src/NotificationView.java,這將被用於顯示新的布局作為新的活動將被啟動的一部分,當用戶將點擊通知 4 複製圖片woman.png在RES/drawable-*文件夾,這個圖片將被用作通知圖標。

可以使用的情況下,要為他們提供了不同的設備有不同的分辨率的圖片 5 修改布局XML文件 res/layout/activity_main.xml 添加三個按鈕的線性布局 6 創建一個新的布局XML文件 res/layout/notification.xml。

這將被用來作為布局文件為新的活動,將啟動時用戶將點擊任何通知 7 修改 res/values/strings.xml  中定義所需的恒定值 8 運行該應用程序時啟動Android模擬器並驗證應用程序所做的修改結果 以下是修改主要活動文件src/com.yiibai.notificationdemo/MainActivity.java 的內容。

這個文件可以包括每個生命周期基本方法。

packagecom.example.notificationdemo; importandroid.os.Bundle; importandroid.app.Activity; importandroid.app.NotificationManager; importandroid.app.PendingIntent; importandroid.app.TaskStackBuilder; importandroid.content.Context; importandroid.content.Intent; importandroid.support.v4.app.NotificationCompat; importandroid.util.Log; importandroid.view.View; importandroid.widget.Button; publicclassMainActivityextendsActivity{ privateNotificationManagermNotificationManager; privateintnotificationID=100; privateintnumMessages=0; protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButtonstartBtn=(Button)findViewById(R.id.start); startBtn.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ displayNotification(); } }); ButtoncancelBtn=(Button)findViewById(R.id.cancel); cancelBtn.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ cancelNotification(); } }); ButtonupdateBtn=(Button)findViewById(R.id.update); updateBtn.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ updateNotification(); } }); } protectedvoiddisplayNotification(){ Log.i("Start","notification"); /*Invokingthedefaultnotificationservice*/ NotificationCompat.BuildermBuilder= newNotificationCompat.Builder(this); mBuilder.setContentTitle("NewMessage"); mBuilder.setContentText("You'vereceivednewmessage."); mBuilder.setTicker("NewMessageAlert!"); mBuilder.setSmallIcon(R.drawable.woman); /*Increasenotificationnumbereverytimeanewnotificationarrives*/ mBuilder.setNumber(++numMessages); /*CreatesanexplicitintentforanActivityinyourapp*/ IntentresultIntent=newIntent(this,NotificationView.class); TaskStackBuilderstackBuilder=TaskStackBuilder.create(this); stackBuilder.addParentStack(NotificationView.class); /*AddstheIntentthatstartstheActivitytothetopofthestack*/ stackBuilder.addNextIntent(resultIntent); PendingIntentresultPendingIntent= stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_UPDATE_CURRENT ); mBuilder.setContentIntent(resultPendingIntent); mNotificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); /*notificationIDallowsyoutoupdatethenotificationlateron.*/ mNotificationManager.notify(notificationID,mBuilder.build()); } protectedvoidcancelNotification(){ Log.i("Cancel","notification"); mNotificationManager.cancel(notificationID); } protectedvoidupdateNotification(){ Log.i("Update","notification"); /*Invokingthedefaultnotificationservice*/ NotificationCompat.BuildermBuilder= newNotificationCompat.Builder(this); mBuilder.setContentTitle("UpdatedMessage"); mBuilder.setContentText("You'vegotupdatedmessage."); mBuilder.setTicker("UpdatedMessageAlert!"); mBuilder.setSmallIcon(R.drawable.woman); /*Increasenotificationnumbereverytimeanewnotificationarrives*/ mBuilder.setNumber(++numMessages); /*CreatesanexplicitintentforanActivityinyourapp*/ IntentresultIntent=newIntent(this,NotificationView.class); TaskStackBuilderstackBuilder=TaskStackBuilder.create(this); stackBuilder.addParentStack(NotificationView.class); /*AddstheIntentthatstartstheActivitytothetopofthestack*/ stackBuilder.addNextIntent(resultIntent); PendingIntentresultPendingIntent= stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_UPDATE_CURRENT ); mBuilder.setContentIntent(resultPendingIntent); mNotificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); /*UpdatetheexistingnotificationusingsamenotificationID*/ mNotificationManager.notify(notificationID,mBuilder.build()); } } 以下是修改的主活動文件的內容 src/com.yiibai.notificationdemo/NotificationView.java. packagecom.example.notificationdemo; importandroid.os.Bundle; importandroid.app.Activity; publicclassNotificationViewextendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.notification); } } 下麵文件 res/layout/activity_main.xml 的內容如下: 下麵是res/layout/notification.xml 文件的內容:  下麵文件 res/values/strings.xml 的內容中定義兩個新的常量: NotificationDemo Settings Helloworld! StartNotification CancelNotification UpdateNotification 下麵是 AndroidManifest.xml文件的內容: 我們嘗試運行NotificationDemo 應用程序。

AVD安裝的應用程序,並啟動它,如果一切設置和應用都冇有問題,它會顯示以下模擬器窗口: 現在單擊“StartNotification”通知按鈕,會看到在上麵的一條消息“NewMessageAlert!”將短暫顯示後,將有下麵的屏幕左上角有一個小圖標。

現在,讓我們展開視圖,長按小圖標,一秒鐘後它會顯示日期信息,這是時間的時候,應該釋放鼠標拖動狀態欄的情況下。

會看到狀態欄將擴大,會得到以下畫麵: 現在,讓我們嘗試在圖像上點擊圖標,這將啟動新的活動,已設置使用的意圖,將有以下屏幕: 接下來,可以點擊“Detailofnotification”,將帶回到主屏幕,可以嘗試使用更新通知按鈕,將更新現有的通知和數量將增加1,但如果發送通知,新的通知ID會繼續增加在堆棧中,會看到他們在屏幕上單獨列示。

圖查看大圖通知 下麵的代碼片斷演示了如何改變的通知,上麵代碼中創建使用收件箱大視圖樣式。

要更新displayNotification()方法來顯示這個功能: protectedvoiddisplayNotification(){ Log.i("Start","notification"); /*Invokingthedefaultnotificationservice*/ NotificationCompat.BuildermBuilder= newNotificationCompat.Builder(this); mBuilder.setContentTitle("NewMessage"); mBuilder.setContentText("You'vereceivednewmessage."); mBuilder.setTicker("NewMessageAlert!"); mBuilder.setSmallIcon(R.drawable.woman); /*Increasenotificationnumbereverytimeanewnotificationarrives*/ mBuilder.setNumber(++numMessages); /*AddBigViewSpecificConfiguration*/ NotificationCompat.InboxStyleinboxStyle= newNotificationCompat.InboxStyle(); String[]events=newString[6]; events[0]=newString("Thisisfirstline...."); events[1]=newString("Thisissecondline..."); events[2]=newString("Thisisthirdline..."); events[3]=newString("Thisis4thline..."); events[4]=newString("Thisis5thline..."); events[5]=newString("Thisis6thline..."); //SetsatitlefortheInboxstylebigview inboxStyle.setBigContentTitle("BigTitleDetails:"); //Moveseventsintothebigview for(inti=0;i



請為這篇文章評分?