Paste_Image.png
設(shè)計(jì)文檔譯文(http://adchs.github.io/patterns/notifications.html)
功能作用
1.顯示接收到短消息逸吵、即使消息等信息 (如QQ凶硅、微信、新浪扫皱、短信)
2.顯示客戶端的推送消息(如有新版本發(fā)布咏尝,廣告,推薦新聞等)
3.顯示正在進(jìn)行的事物(例如:后臺運(yùn)行的程序)(如音樂播放器啸罢、版本更新時候的下載進(jìn)度等)
基本使用
public static NotificationManager getNotificationManager(Context context) {
NotificationManager instance = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
return instance;
}
public static Notification getNotification(Context context, Messager msg) {
Notification notification = new Builder(context)
.setContentTitle(msg.title)
.setContentText(msg.message)
.setContentIntent(getDefalutIntent(context, msg.action, Notification.FLAG_AUTO_CANCEL))
.setWhen(System.currentTimeMillis())// 通知產(chǎn)生的時間编检,會在通知信息里顯示,一般是系統(tǒng)獲取到的時間
//.setPriority(Notification.PRIORITY_DEFAULT) // 設(shè)置該通知優(yōu)先級
.setAutoCancel(true)//設(shè)置這個標(biāo)志當(dāng)用戶單擊面板就可以讓通知將自動取消
.setOngoing(false)// ture扰才,設(shè)置他為一個正在進(jìn)行的通知允懂。他們通常是用來表示一個后臺任務(wù),用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設(shè)備(如一個文件下載,同步操作,主動網(wǎng)絡(luò)連接)
.setDefaults(Notification.DEFAULT_VIBRATE)// 向通知添加聲音、閃燈和振動效果的最簡單衩匣、最一致的方式是使用當(dāng)前的用戶默認(rèn)設(shè)置蕾总,使用defaults屬性,可以組合
.build();// 設(shè)置通知小ICON .build();
notification.flags = Notification.FLAG_AUTO_CANCEL;
notification.icon = msg.icon;
return notification;
}
private static PendingIntent getDefalutIntent(Context context, String action, int flag) {
Intent intent = new Intent();
if(action.startsWith("http")){
Uri uri = Uri.parse(action);
intent = new Intent(Intent.ACTION_VIEW, uri);
} else {
}
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intent, flag);
return pendingIntent;
}
public static void sendNotification(Context context, Messager msg) {
getNotificationManager(context).notify(msg.id, getNotification(context, msg));
}
推薦使用(兼容性問題)(NotificationCompat)
public static Notification getNotification(Context context, Messager msg) {
int icon = 0;
try {
ApplicationInfo info = context.getPackageManager()
.getApplicationInfo(context.getPackageName(), 0);
icon = info.icon;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(msg.title)
.setContentText(msg.message)
.setSmallIcon(icon)
.setAutoCancel(true)
.setContentIntent(
getDefalutIntent(context, msg,
PendingIntent.FLAG_UPDATE_CURRENT))
.setWhen(System.currentTimeMillis())// 通知產(chǎn)生的時間琅捏,會在通知信息里顯示生百,一般是系統(tǒng)獲取到的時間
// .setPriority(Notification.PRIORITY_DEFAULT) // 設(shè)置該通知優(yōu)先級
.setAutoCancel(true)// 設(shè)置這個標(biāo)志當(dāng)用戶單擊面板就可以讓通知將自動取消
.setOngoing(false)// ture,設(shè)置他為一個正在進(jìn)行的通知柄延。他們通常是用來表示一個后臺任務(wù),用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設(shè)備(如一個文件下載,同步操作,主動網(wǎng)絡(luò)連接)
.setDefaults(NotificationCompat.DEFAULT_VIBRATE)// 向通知添加聲音蚀浆、閃燈和振動效果的最簡單、最一致的方式是使用當(dāng)前的用戶默認(rèn)設(shè)置,使用defaults屬性市俊,可以組合
.build();// 設(shè)置通知小ICON .build();
return notification;
}
指定parent杨凑、獨(dú)立存在(新task)
- 添加到 parent task
Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back
stackstackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent to the top of the stack
stackBuilder.addNextIntent(resultIntent);
// Gets a PendingIntent containing the entire back
stackPendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
...
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(id, builder.build());
- new Task
private static PendingIntent getDefalutIntent(Context context,
Messager msg, int flag) {
Intent intent = new Intent();
intent.putExtra(BKWebViewActivity.TITLE, msg.title);
intent.putExtra(BKWebViewActivity.URL, msg.url);
intent.putExtra(BKWebViewActivity.HTML, msg.html);
intent.setClassName(context, "packname.WebViewActivity");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, msg.id, intent, flag);
return pendingIntent;
}
<activity
android:name=".WebViewActivity"
android:configChanges="fontScale|orientation|keyboardHidden|locale|navigation|screenSize|uiMode"
android:taskAffinity=""
android:launchMode="singleTask"
android:excludeFromRecents="true"
android:screenOrientation="portrait" />
RemoteViews 自定義布局
public static Notification getCustomNotification(Context context, Messager msg) {
Notification notification = new Notification();
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.notify);
notification.contentView = remoteView;
notification.contentIntent = getDefalutIntent(context, msg.action, Notification.FLAG_AUTO_CANCEL);
remoteView.setOnClickPendingIntent(R.id.notify_layout, getDefalutIntent(context, msg.action, Notification.FLAG_AUTO_CANCEL));
return notification;
}