下面列出了android.app.Notification#InboxStyle ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public void inBoxStyle(){
// 获取系统 通知管理 服务
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(this);// 构建 Notification
builder.setContentTitle("这里是通知的标题~")
.setSmallIcon(R.drawable.ic_play)
.setContentText("这里是通知的内容!");
Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
inboxStyle.addLine("First line.");// 添加行
inboxStyle.addLine("Second line");
inboxStyle.addLine("Third line");
inboxStyle.addLine("Last line");
inboxStyle.setBigContentTitle("ContentTitle");// 设置标题以及简介文字
inboxStyle.setSummaryText("SummaryText");
builder.setStyle(inboxStyle);
// 兼容 API 26,Android 8.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
// 第三个参数表示通知的重要程度,默认则只在通知栏闪烁一下
NotificationChannel notificationChannel = new NotificationChannel("AppTestNotificationId", "AppTestNotificationName", NotificationManager.IMPORTANCE_DEFAULT);
// 注册通道,注册后除非卸载再安装否则不改变
notificationManager.createNotificationChannel(notificationChannel);
builder.setChannelId("AppTestNotificationId");
}
// 发出通知
notificationManager.notify(1, builder.build());
}
public void addInboxStyle(CharSequence bigContentTitle, boolean useSummary,
CharSequence summaryText, ArrayList<CharSequence> texts) {
Notification.InboxStyle style = new Notification.InboxStyle(b)
.setBigContentTitle(bigContentTitle);
if (useSummary) {
style.setSummaryText(summaryText);
}
for (CharSequence text: texts) {
style.addLine(text);
}
}
public static void addInboxStyle(NotificationBuilderWithBuilderAccessor b,
CharSequence bigContentTitle, boolean useSummary,
CharSequence summaryText, ArrayList<CharSequence> texts) {
Notification.InboxStyle style = new Notification.InboxStyle(b.getBuilder())
.setBigContentTitle(bigContentTitle);
if (useSummary) {
style.setSummaryText(summaryText);
}
for (CharSequence text: texts) {
style.addLine(text);
}
}
public void addInboxStyle(CharSequence bigContentTitle, boolean useSummary,
CharSequence summaryText, ArrayList<CharSequence> texts) {
Notification.InboxStyle style = new Notification.InboxStyle(b)
.setBigContentTitle(bigContentTitle);
if (useSummary) {
style.setSummaryText(summaryText);
}
for (CharSequence text: texts) {
style.addLine(text);
}
}
private void checkout() throws Exception {
URL url = new URL(METADATA_URL);
InputStream inputStream = url.openStream();
Scanner in = new Scanner(inputStream).useDelimiter("\\A");
if (in.hasNext()) {
JSONObject metadata = new JSONObject(in.next());
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
if (info.versionCode < metadata.optInt(FIELD_VERSION_CODE)) {
Notification.InboxStyle style = new Notification.InboxStyle(mBuilder);
String size = metadata.optString("size");
style.setBigContentTitle(getString(R.string.find_new_version, size));
JSONArray messages = metadata.optJSONArray("messages");
for (int i = 0; i < messages.length(); i++) {
style.addLine(messages.optString(i));
}
// download&upgrade intent
Intent download = new Intent(this, UpgradeService.class);
download.setAction(ACTION_DOWNLOAD);
download.putExtra(DOWNLOAD_LINK, metadata.optString(DOWNLOAD_LINK));
PendingIntent piDownload = PendingIntent.getService(this, 0, download, 0);
mBuilder.addAction(R.drawable.ic_stat_download_dark, getString(R.string.down_load_and_upgrade), piDownload);
// dismiss notification
Intent dismiss = new Intent(this, UpgradeService.class);
dismiss.setAction(ACTION_DISMISS);
PendingIntent piDismiss = PendingIntent.getService(this, 0, dismiss, 0);
mBuilder.addAction(R.drawable.ic_stat_content_remove_dark, getString(R.string.not_upgrade_now), piDismiss);
// show it.
mBuilder.setTicker(getString(R.string.find_new_version));
mNotificationManager.notify(ID, mBuilder.setDefaults(Notification.DEFAULT_ALL).build());
} else {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(UpgradeService.this, getString(R.string.already_updated), Toast.LENGTH_SHORT).show();
}
});
}
}
in.close();
}
public void addInboxStyle(CharSequence bigContentTitle, boolean useSummary,
CharSequence summaryText, ArrayList<CharSequence> texts) {
Notification.InboxStyle style = new Notification.InboxStyle(b)
.setBigContentTitle(bigContentTitle);
if (useSummary) {
style.setSummaryText(summaryText);
}
for (CharSequence text: texts) {
style.addLine(text);
}
}
private synchronized void initiateUpdate() {
mBuilder.setContentTitle("Data traffic");
// String.format("↓%[email protected]%s%s, ↑%[email protected]%s%s, ⇅%[email protected]%s%s",
// Formatter.formatFileSize(getApplicationContext(), totalRxSincePrev),
// Util.nf.format(rateTotalRxSincePrev),
// unitTypeArr[unitType],
// Formatter.formatFileSize(getApplicationContext(), totalTxSincePrev),
// Util.nf.format(rateTotalTxSincePrev),
// unitTypeArr[unitType],
// Formatter.formatFileSize(getApplicationContext(), (totalRxSincePrev + totalTxSincePrev)),
// Util.nf.format(rateTotalRxSincePrev + rateTotalTxSincePrev),
// unitTypeArr[unitType]));
if (rateTotalTxSincePrev == 0 && rateTotalRxSincePrev == 0) {
mBuilder.setSmallIcon(android.R.drawable.ic_menu_more);
} else if (rateTotalTxSincePrev == 0 && rateTotalRxSincePrev > 0) {
mBuilder.setSmallIcon(android.R.drawable.stat_sys_download);
} else if (rateTotalTxSincePrev > 0 && rateTotalRxSincePrev == 0) {
mBuilder.setSmallIcon(android.R.drawable.stat_sys_upload);
} else if (rateTotalTxSincePrev > 0 && rateTotalRxSincePrev > 0) {//1307 bytes is equal to .1Mbit
mBuilder.setSmallIcon(android.R.drawable.ic_notification_overlay);
}
final Notification.InboxStyle big = new Notification.InboxStyle();
big.addLine(String.format("↓%[email protected]%s%s",
Formatter.formatFileSize(getApplicationContext(), totalRxSincePrev),
Util.nf.format(rateTotalRxSincePrev),
unitTypeArr[unitType]));
big.addLine(String.format("↑%[email protected]%s%s",
Formatter.formatFileSize(getApplicationContext(), totalTxSincePrev),
Util.nf.format(rateTotalTxSincePrev),
unitTypeArr[unitType]));
big.addLine(String.format("⇅%[email protected]%s%s",
Formatter.formatFileSize(getApplicationContext(), (totalRxSincePrev + totalTxSincePrev)),
Util.nf.format(rateTotalRxSincePrev + rateTotalTxSincePrev),
unitTypeArr[unitType]));
// long rateRxSincePrev;
// long rateTxSincePrev;
// final Context applicationContext = getApplicationContext();
// final int gap = pollRate * 1000 / appStatsList.size();
// for (AppStats appStat : appStatsList) {
// rateRxSincePrev = appStat.bytesRxSincePrev * 1000000 / (appStat.elapsedTimeSincePrev / 1000);
// rateTxSincePrev = appStat.bytesTxSincePrev * 1000000 / (appStat.elapsedTimeSincePrev / 1000);
// if (unitType > 3) {
// rateRxSincePrev = (rateRxSincePrev >> (10 * (unitType - 4)));
// rateTxSincePrev = (rateTxSincePrev >> (10 * (unitType - 4)));
// } else {
// rateRxSincePrev = ((rateRxSincePrev >> (10 * unitType)) << 3);
// rateTxSincePrev = ((rateTxSincePrev >> (10 * unitType)) << 3);
// }
// big.addLine(String.format("%s\n↓%[email protected]%s%s, ↑%[email protected]%s%s, ⇅%[email protected]%s%s",
// appStat.name,
// Formatter.formatFileSize(applicationContext, appStat.bytesRxSincePrev),
// Util.nf.format(rateRxSincePrev),
// unitTypeArr[unitType],
// Formatter.formatFileSize(applicationContext, appStat.bytesTxSincePrev),
// Util.nf.format(rateTxSincePrev),
// unitTypeArr[unitType],
// Formatter.formatFileSize(applicationContext, (appStat.bytesRxSincePrev + appStat.bytesTxSincePrev)),
// Util.nf.format(rateRxSincePrev + rateTxSincePrev),
// unitTypeArr[unitType]));
// try {
// Thread.sleep(gap);
// } catch (InterruptedException e) {}
// }
mNotifyMgr.notify(mNotificationId, mBuilder.setStyle(big).build());
}
@JavascriptInterface
public void showNotification(String title, String body, String picture, String action) {
Bitmap pictureBitmap = getBitmapFromURL(picture);
Intent i = new Intent(this, MainActivity.class);
if (action != null) {
i.setAction(action);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
PendingIntent pi = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
// The deleteIntent declaration
Intent deleteIntent = new Intent(action);
PendingIntent pendingDeleteIntent = PendingIntent.getBroadcast(this, 0, deleteIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
registerReceiver(receiver, new IntentFilter(action));
// Integer counter;
List<String> messages = null;
// There is already pending notifications
if (this.notifs.get(action) != null) {
messages = this.notifs.get(action);
} else {
messages = new ArrayList<String>();
}
messages.add(body);
if (messages.size() > 5) {
messages.remove(0);
}
this.notifs.put(action, messages);
// We create the inbox
Notification.InboxStyle style = new Notification.InboxStyle();
for (int j = 0; j < messages.size(); j++) {
style.addLine(messages.get(j));
}
style.setBigContentTitle(title);
Notification notification = new Notification.Builder(this).setSmallIcon(R.drawable.ic_stat_name)
.setLargeIcon(pictureBitmap).setContentTitle(title).setContentText(body).setContentIntent(pi)
.setDeleteIntent(pendingDeleteIntent).setAutoCancel(true).setColor(Color.parseColor("#3F51B5"))
.setLights(Color.parseColor("#3F51B5"), 1000, 5000).setNumber(messages.size()).setStyle(style)
.setGroup("movim").build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(action, 0, notification);
}
private void updateNotification(List<Data.AnnotatedMessage> newMessages) {
// Max, as per documentation: http://developer.android.com/reference/android/app/Notification.InboxStyle.html
final int MAX_LINES = 5;
// Invoke main Activity when notification is clicked
Intent intent = new Intent(this, ActivityMain.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
int iconResourceId;
String contentTitle;
if (newMessages != null && newMessages.size() > 0) {
intent.setAction(ActivityMain.ACTION_DISPLAY_MESSAGES);
iconResourceId = R.drawable.ic_notification_with_new_messages;
contentTitle =
getResources().getQuantityString(
R.plurals.foreground_service_notification_content_title_with_new_messages,
newMessages.size(),
newMessages.size());
} else {
intent.setAction("android.intent.action.MAIN");
iconResourceId = R.drawable.ic_notification_without_new_messages;
contentTitle = getString(R.string.foreground_service_notification_content_title_without_new_messages);
}
PendingIntent pendingIntent =
PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification.Builder notificationBuilder =
new Notification.Builder(this)
.setContentIntent(pendingIntent)
.setContentTitle(contentTitle)
.setSmallIcon(iconResourceId);
Notification notification;
if (newMessages != null && newMessages.size() > 0) {
// Use default (system) sound, lights, and vibrate
notificationBuilder.setDefaults(Notification.DEFAULT_ALL);
// Build email-style big view with summary of new messages
Notification.InboxStyle inboxStyleBuilder =
new Notification.InboxStyle(notificationBuilder);
for (int i = 0; i < MAX_LINES && i < newMessages.size(); i++) {
inboxStyleBuilder.addLine(
Html.fromHtml(
getString(
R.string.foreground_service_notification_inbox_line,
newMessages.get(i).mPublicIdentity.mNickname,
newMessages.get(i).mMessage.mContent)));
}
if (newMessages.size() > MAX_LINES) {
inboxStyleBuilder.setSummaryText(
getString(
R.string.foreground_service_notification_inbox_summary,
newMessages.size() - MAX_LINES));
}
notification = inboxStyleBuilder.build();
} else {
notification = notificationBuilder.build();
}
if (mNotification == null) {
mNotification = notification;
}
else {
// TODO: if other notification attributes are added (ie ticker), copy them here
mNotification.contentIntent = notification.contentIntent;
mNotification.bigContentView = notification.bigContentView;
mNotification.contentView = notification.contentView;
mNotification.icon = notification.icon;
mNotification.largeIcon = notification.largeIcon;
mNotification.defaults = notification.defaults;
}
}