1.使用通知
1.1 創(chuàng)建一個通知
-
第一步:獲得NotificationManager對象來對通知進行管理。
可以調用Context的getSystemService()方法獲取。該方法接收一個字符串參數(shù),用于確定獲取哪個系統(tǒng)服務,獲取通知傳入
Context.NOTIFICATION_SERVICE
- 代碼如下:
//創(chuàng)建一個NotificationManager對象 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
第二步:創(chuàng)建一個Notification對象
使用一個Builder構造器來創(chuàng)建一個Notification對象韧衣。
//創(chuàng)建Notification
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.build();
- 第三步:顯示通知
調用NotificationManager的notify()方法可以讓通知顯示出來,該方法接收兩個參數(shù)购桑,第一個是id畅铭,保證每個通知指定的id都是不同的,第二個是要顯示的Notification對象
manager.notify(1, notification);
- 完整代碼如下
sendNotice = (Button) findViewById(R.id.send_notification);
sendNotice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//獲得NotificationManager對象
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//創(chuàng)建Notification
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.build();
//發(fā)送通知
manager.notify(1, notification);
}
});
1.2實現(xiàn)通知的點擊功能
使用PendingIntent可以實現(xiàn)這一功能勃蜘。PendingIntent和Intent類似硕噩,但是PendingIntent更加傾向于在某個合適的時機去執(zhí)行某個某個動作,而Intent更加傾向于立即執(zhí)行某個動作缭贡。
1.2.1PendingIntent的用法
- PendingIntent提供了幾個靜態(tài)方法用于獲取PendingIntent的實例:
getActivity()
炉擅、getBroadcast()
辉懒、getService()
。
- 這幾個靜態(tài)方法接受的參數(shù)都是相同的:
- 第一個是Context
- 第二個一般用不到谍失,通常傳0即可眶俩。
- 第三個是一個Intent對象
- 第四個是用于確定PendingIntent的行為
- 完整代碼如下
//初始化Intent
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
//使用Intent獲得PendingIntent對象
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//設置PendingIntent
.setContentIntent(pi)
.build();
//顯示通知
manager.notify(1,notification);
}
1.3實現(xiàn)點擊通知之后刪除通知的功能
實現(xiàn)這個功能有兩種方法,
- 第一種是在實例化notification時setAutoCancel傳入true快鱼。
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//設置PendingIntent
.setContentIntent(pi)
//設置點擊通知時刪除通知
.setAutoCancel(true)
.build();
- 第二種是顯示的調用NotificationManager的cancel()方法將它取消颠印,這個方法接收通知的id用于指定取消哪個通知
//獲得NotificationManager對象
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//取消id為1的通知
manager.cancel(1);
2.通知的高級功能
2.1通知發(fā)出時播放音頻
使用setSound()方法,接收一個Uri參數(shù)抹竹,指定通知發(fā)出時要播放的音頻
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//設置PendingIntent
.setContentIntent(pi)
//設置點擊通知時刪除通知
.setAutoCancel(true)
//播放音頻
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
.build();
2.2通知發(fā)出時手機振動
使用setVibrate()方法线罕,接收一個virbrate參數(shù),它是一個長整型數(shù)組窃判,用于設置手機靜止和振動的時長钞楼。下標為0的值表示手機靜止的時長,下標為1的值表示手機振動時長兢孝,下標為2的值表示手機靜止的時長窿凤。
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//設置PendingIntent
.setContentIntent(pi)
//設置點擊通知時刪除通知
.setAutoCancel(true)
//播放音頻
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
//設置手機接收到通知時立刻振動1秒,靜止1秒跨蟹,再振動一秒
.setVibrate(new long[] {0, 1000, 1000, 1000})
.build();
注意:使用手機的震動功能還需在AndroidManifest.xml文件中添加權限聲明
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.anwser_mac.notificationtest">
//聲明權限
<uses-permission android:name="android.permission.VIBRATE"/>
2.3 實現(xiàn)通知未讀時LED燈閃爍
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//設置PendingIntent
.setContentIntent(pi)
//設置點擊通知時刪除通知
.setAutoCancel(true)
//播放音頻
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
//設置手機接收到通知時立刻振動1秒雳殊,靜止1秒,再振動一秒
.setVibrate(new long[] {0, 1000, 1000, 1000})
//設置LED燈,綠色閃爍
.setLights(Color.GREEN, 1000, 1000)
.build();
-
注:如果不想進行這么繁雜設置窗轩,可以直接使用通知的默認效果夯秃,它會根據(jù)手機環(huán)境來決定播放什么鈴聲,及如何振動等
Notification notification = new NotificationCompat.Builder(this) .setDefaults(NotificationCompat.DEFAULT_ALL) .build();
2.4設置通知顯示長文本內容痢艺,超出范圍自動換行
在setStyle方法中創(chuàng)建一個NotificationCompat.BigTextStyle對象仓洼,然后調用該對象的bigText方法
.setStyle(new NotificationCompat.BigTextStyle().bigText("hhhhhhhhhhhhhhhhhhhhhhhhhhhhzheshi 一段很長長的文本"))
2.5設置通知顯示一張大圖
具體用法跟2.4類似,但是這次創(chuàng)建的是一個NotificationCompat.BitPictureStyle對象堤舒。
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round)))
2.6設置通知的重要程度
調用setPriority()方法來設置通知的重要程度色建,分為5歌級別
- PRIORITY_DEFAULT : 表示默認程度,和不設置的效果一樣舌缤。
- PRIORITY_MIN :最低的重要程度箕戳,系統(tǒng)可能只會在特定的場景才會顯示這條通知,比如用戶下拉狀態(tài)欄的時候国撵。
- PRIORITY_LOW : 較低的重要程度陵吸,系統(tǒng)可能會降這類通知縮小,或改變其顯示的順序
- PRIORITY_HIGHT : 較高的重要程度介牙,系統(tǒng)可能會將這類通知放大壮虫,或改變其顯示的順序,將其排在比較靠前的位置环础。
- PRIORITY_MAX : 最高的重要程度囚似,這類通知消息必須要讓用戶立即看到剩拢,甚至需要用戶做出相應操作。
- 具體寫法如下:
setPriority(NotificationCompat.PRIORITY_MAX)