摘要:簡介通知在用戶界面的一個重要部分,其使用方法請看以下內(nèi)容繼承關(guān)系如下簡介通知是應(yīng)用向用戶顯示的消息提示,當(dāng)發(fā)送通知時,通知將先以圖標(biāo)的形式顯示在通知區(qū)域中。通知區(qū)域和下拉通知欄均是由系統(tǒng)控制的區(qū)域,用戶可以隨時查看。
極力推薦文章:歡迎收藏
Android 干貨分享
本篇文章主要介紹 Android 開發(fā)中的部分知識點,通過閱讀本篇文章,您將收獲以下內(nèi)容:
Notification 簡介
通知的創(chuàng)建
通知的管理
簡單的通知
可以 擴展的通知
通知中含下載進度條
通知中含媒體播放控件
自定義通知內(nèi)容
Notification 通知是應(yīng)用向用戶顯示的消息提示,當(dāng)發(fā)送通知時,通知將先以圖標(biāo)的形式顯示在通知區(qū)域中。用戶可以打開下拉通知欄查看通知的詳細(xì)信息。 通知區(qū)域和下拉通知欄均是由系統(tǒng)控制的區(qū)域,用戶可以隨時查看。
Notification 簡介通知在Android用戶界面的一個重要部分,其使用方法請看以下內(nèi)容:
Notification 繼承關(guān)系如下:java.lang.Object ???? android.app.Notification1.Notification 簡介
通知是應(yīng)用向用戶顯示的消息提示,當(dāng)發(fā)送通知時,通知將先以圖標(biāo)的形式顯示在通知區(qū)域中。用戶可以打開下拉通知欄查看通知的詳細(xì)信息。 通知區(qū)域和下拉通知欄均是由系統(tǒng)控制的區(qū)域,用戶可以隨時查看。
2.創(chuàng)建Notification 的方法調(diào)用NotificationCompat.Builder.build() 創(chuàng)建Notification 對象
然后調(diào)用 NotificationManager.notify() 將 Notification 對象傳遞給系統(tǒng)。
Notification 對象必須包含以下內(nèi)容:小圖標(biāo),由 setSmallIcon() 設(shè)置
標(biāo)題,由 setContentTitle() 設(shè)置
詳細(xì)文本,由 setContentText() 設(shè)置
通知可選內(nèi)容設(shè)置優(yōu)先級
通知默認(rèn)優(yōu)先級為 PRIORITY_DEFAULT 0
Notification.Builder.setPriority()
5個級別可選(-2、-1、0、1、2)
通知優(yōu)先級如下:
PRIORITY_LOW=-1 PRIORITY_MIN=-2 PRIORITY_DEFAULT = 0 PRIORITY_HIGH=1 PRIORITY_MAX=2設(shè)置可以擴展樣式
通過Notification.Builder.setStyle()可以設(shè)置通知的樣式。
點擊通知啟動Activity(PendingIntent)通知中經(jīng)常遇到,點擊通知欄,打開 Activity。
Notification.Builder mBuilder = new Notification.Builder(this); mBuilder.setSmallIcon(R.drawable.gril) .setDefaults(Notification.DEFAULT_SOUND).setColor(000) .setContentTitle("簡單通知Tittle").setContentText("點擊可以打開Activity"); Intent resultIntent = new Intent(this, NotificationMethods.class); // 新開一個Activity 棧 resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(NotificationMethods.class); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(0, mBuilder.build());3. 通知的管理
更新通知
調(diào)用 NotificationManager.notify(ID) 發(fā)出帶有通知 ID 的通知,ID相同,即可更新以前ID發(fā)送的通知。
刪除通知
創(chuàng)建時 調(diào)用了 setAutoCancel(true)
刪除時候調(diào)用刪除指定ID
NotificationManager.cancel(notificationId)
刪除自己應(yīng)用發(fā)的所有通知
Utils.mNotificationManager.cancelAll();
在通知中顯示進度條
setProgress()
4. 簡單的通知實現(xiàn)效果
實現(xiàn)代碼
/** * 簡單通知 */ public void SimpleNotification(View view) { Notification.Builder mBuilder = new Notification.Builder(this); mBuilder.setSmallIcon(R.drawable.gril) .setDefaults(Notification.DEFAULT_SOUND).setColor(000) .setContentTitle("簡單通知Tittle").setContentText("點擊可以打開Activity"); Intent resultIntent = new Intent(this, NotificationMethods.class); // 新開一個Activity 棧 resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(NotificationMethods.class); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(0, mBuilder.build()); }5. 可以 擴展的通知
實現(xiàn)效果
實現(xiàn)代碼
/** * 可擴展通知 * **/ public void NotificationStyle(View view) { Notification.Builder mBuilder = new Notification.Builder(this); mBuilder.setLargeIcon( DrawableUtils.DrawableToBitmap(getResources().getDrawable( R.drawable.ic_launcher))) .setContentTitle("我是可擴展通知的Tittle ") .setDefaults(Notification.DEFAULT_SOUND) .setContentText("我是可擴展通知的內(nèi)容") .setSmallIcon(R.drawable.ic_launcher) .setAutoCancel(true) .setStyle( new Notification.InboxStyle().addLine("我是可擴展通知第一行") .addLine("我是可擴展通知第二行") .setBigContentTitle("我是可擴展的大 Tittle") .setSummaryText("點擊,展開獲取更多內(nèi)容")); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 如果Id 一樣可以更新通知 mNotificationManager.notify(1, mBuilder.build()); }6. 通知中含下載進度條
實現(xiàn)效果
實現(xiàn)代碼
/** * 帶有下載進度條的通知 * **/ public void NotificationProcess(View view) { final NotificationManager mNotifyManagerProcess; final Notification.Builder mBuilder; mNotifyManagerProcess = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mBuilder = new Notification.Builder(this); mBuilder.setContentTitle("Picture Downloading").setSmallIcon( R.drawable.ic_launcher); new Thread(new Runnable() { @Override public void run() { for (MIncr = 0; MIncr <= 100; MIncr += 1 + 5 * Math.random()) { mBuilder.setProgress(100, MIncr, false).setContentText( MIncr + "%"); mNotifyManagerProcess.notify(2, mBuilder.build()); try { Thread.sleep(500); } catch (InterruptedException e) { } } /** * setProgress true 則表示 進度條一直不停的從左至右滑動,類似于圓形進度條 false :進度條消失 * **/ mBuilder.setContentText("Download complete").setProgress(0, 0, false); mNotifyManagerProcess.notify(2, mBuilder.build()); } }).start(); }7. 通知中含媒體播放控件
實現(xiàn)效果
實現(xiàn)代碼
/** * 音樂播放器樣式 * **/ public void NotificationMediaStyle(View view) { Notification.Builder mMediaBuilder = new Notification.Builder(this); mMediaBuilder.setSmallIcon(R.drawable.ic_launcher); mMediaBuilder.setContentTitle("如果有一天我變有錢"); mMediaBuilder.setContentText("毛不易"); mMediaBuilder.setLargeIcon(DrawableUtils .DrawableToBitmap(getResources().getDrawable( R.drawable.ic_launcher))); Intent mIntent = new Intent(); ComponentName name = new ComponentName(this, NotificationMethods.class); mIntent.setComponent(name); PendingIntent mPendingIntent = PendingIntent.getActivity( getApplicationContext(), 0, mIntent, 0); mMediaBuilder.setContentIntent(mPendingIntent); mMediaBuilder.setPriority(Notification.PRIORITY_MAX); mMediaBuilder.addAction(new Notification.Action.Builder(Icon .createWithResource(NotificationMethods.this, R.drawable.music_pre), "1", null).build()); mMediaBuilder.addAction(new Notification.Action.Builder(Icon .createWithResource(NotificationMethods.this, R.drawable.music_play), "2", null).build()); mMediaBuilder.addAction(new Notification.Action.Builder(Icon .createWithResource(NotificationMethods.this, R.drawable.music_next), "3", null).build()); Notification.MediaStyle mMediaStyle = new Notification.MediaStyle(); mMediaStyle.setShowActionsInCompactView(0, 1, 2); mMediaBuilder.setStyle(mMediaStyle); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 如果Id 一樣可以更新通知 mNotificationManager.notify(1, mMediaBuilder.build()); }8. 自定義通知內(nèi)容
實現(xiàn)效果
實現(xiàn)代碼
/** * 自定義樣式通知 * **/ public void NotificationCustomView(View view) { /*** * 自定義Remoteview * **/ RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.notification_view); remoteViews.setTextViewText(R.id.tv_content_title, "十年"); remoteViews.setTextViewText(R.id.tv_content_text, "陳奕迅"); // 打開上一首 remoteViews.setOnClickPendingIntent(R.id.btn_pre, SetClickPendingIntent(NOTIFICATION_PRE)); // 打開下一首 remoteViews.setOnClickPendingIntent(R.id.btn_next, SetClickPendingIntent(NOTIFICATION_NEXT)); // 點擊整體布局時,打開播放器 remoteViews.setOnClickPendingIntent(R.id.btn_play, SetClickPendingIntent(NOTIFICATION_PLAY)); // 點擊整體布局時,打開Activity remoteViews.setOnClickPendingIntent(R.id.ll_root, SetClickPendingIntent(NOTIFICATION_ACTIVITY)); remoteViews.setOnClickPendingIntent(R.id.img_clear, SetClickPendingIntent(NOTIFICATION_CANCEL)); Notification.Builder builder = new Notification.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setTicker("當(dāng)前正在播放..") .setWhen(System.currentTimeMillis()) .setContentTitle("十年") .setContentText("陳奕迅") .setAutoCancel(true) .setLargeIcon( DrawableUtils.DrawableToBitmap(getResources() .getDrawable(R.drawable.ic_launcher))) .setContent(remoteViews); Utils.mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // 打開通知 Utils.mNotificationManager.notify(Utils.NOTIFICATION_CUSTOM_ID, builder.build()); } public PendingIntent SetClickPendingIntent(int what) { switch (what) { case NOTIFICATION_PRE: Intent intentPre = new Intent(this, MainActivity.class); intentPre.putExtra("cmd", what); int flagPre = PendingIntent.FLAG_UPDATE_CURRENT; PendingIntent clickPreIntent = PendingIntent.getActivity(this, what, intentPre, flagPre); return clickPreIntent; case NOTIFICATION_PLAY: Intent intentPlay = new Intent(this, NotificationMethods.class); intentPlay.putExtra("cmd", what); int flagPlay = PendingIntent.FLAG_UPDATE_CURRENT; PendingIntent clickPlayIntent = PendingIntent.getActivity(this, what, intentPlay, flagPlay); return clickPlayIntent; case NOTIFICATION_NEXT: Intent intentNext = new Intent(this, ActivityMethods.class); intentNext.putExtra("cmd", what); int flagNext = PendingIntent.FLAG_UPDATE_CURRENT; PendingIntent clickNextIntent = PendingIntent.getActivity(this, what, intentNext, flagNext); return clickNextIntent; case NOTIFICATION_ACTIVITY: Intent intentActivity = new Intent(this, ServiceMethod.class); intentActivity.putExtra("cmd", what); int flag = PendingIntent.FLAG_UPDATE_CURRENT; PendingIntent clickIntent = PendingIntent.getActivity(this, what, intentActivity, flag); Toast.makeText(getApplicationContext(), "打開Activity", 0).show(); return clickIntent; case NOTIFICATION_CANCEL: Intent intentCancel = new Intent("Notification_cancel"); intentCancel.putExtra("cancel_notification_id", Utils.NOTIFICATION_CUSTOM_ID); int flagCancel = PendingIntent.FLAG_CANCEL_CURRENT; PendingIntent clickCancelIntent = PendingIntent.getBroadcast(this, 0, intentCancel, flagCancel); return clickCancelIntent; default: break; } return null; }
自定View 布局如下:
實現(xiàn)自定義通知刪除按鈕事件實現(xiàn)
case NOTIFICATION_CANCEL: Intent intentCancel = new Intent("Notification_cancel"); intentCancel.putExtra("cancel_notification_id", Utils.NOTIFICATION_CUSTOM_ID); int flagCancel = PendingIntent.FLAG_CANCEL_CURRENT; PendingIntent clickCancelIntent = PendingIntent.getBroadcast(this, 0, intentCancel, flagCancel); return clickCancelIntent;
廣播是四大組件之一,需要在AndroidManfest.xml 中注冊
注冊方式如下:
至此,本篇已結(jié)束,如有不對的地方,歡迎您的建議與指正。同時期待您的關(guān)注,感謝您的閱讀,謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/75842.html
摘要:只能執(zhí)行單一操作,無法返回結(jié)果給調(diào)用方,常用于網(wǎng)絡(luò)下載上傳文件,播放音樂等。綁定模式此模式通過綁定組件等調(diào)用啟動此服務(wù)隨綁定組件的消亡而解除綁定。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); 極力推薦文章:歡迎收藏Android 干貨分享 showImg(https://segme...
摘要:靜態(tài)注冊廣播的方法動態(tài)注冊廣播在中動態(tài)注冊廣播,通常格式如下動態(tài)注冊廣播動態(tài)注冊監(jiān)聽滅屏點亮屏幕的廣播在廣播中動態(tài)注冊廣播請注意一定要使用,防止為空,引起空指針異常。綁定模式此模式通過綁定組件等調(diào)用啟動此服務(wù)隨綁定組件的消亡而解除綁定。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); 極...
摘要:四大組件都支持這個屬性。到目前為止,中總共有三種啟動方式。返回值方法有一個的返回值,這個返回值標(biāo)識服務(wù)關(guān)閉后系統(tǒng)的后續(xù)操作。,啟動后的服務(wù)被殺死,不能保證系統(tǒng)一定會重新創(chuàng)建。 1. 簡介 這篇文章會從Service的一些小知識點,延伸到Android中幾種常用進程間通信方法。 2. 進程 ? ? ? ?Service是一種不提供用戶交互頁面但是可以在后臺長時間運行的組件,可以通過在An...
閱讀 2137·2021-11-22 15:22
閱讀 1286·2021-11-11 16:54
閱讀 1807·2021-09-23 11:32
閱讀 3007·2021-09-22 10:02
閱讀 1770·2019-08-30 12:59
閱讀 1085·2019-08-29 16:27
閱讀 621·2019-08-29 13:21
閱讀 2463·2019-08-28 17:57