用RemoteView自定义布局很简单的能实现通知栏的图标自定义。可是因为项目需求不能用xml布局,只能用代码写。也没想到怎么用Java代码实现RemoteView布局。然后想到了如下方法:
Class<?> localClass = Class.forName("com.android.internal.R$id");
// int = localClass.getField("title").getInt(localClass);
// n = localClass.getField("text").getInt(localClass);
int iconID = localClass.getField("icon").getInt(localClass);
int icon = mContext.getApplicationInfo().icon;
Intent notificationIntent = new Intent(mContext, KongActivity.class);
Bundle bundle = this.mAdvData.convertToBundle();
notificationIntent.putExtras(bundle);
notificationIntent.putExtra(KongActivity.STRING_ACTION,
AdvAnalysis.ID_NOTIFICATION);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
// notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(mContext,
(int) System.currentTimeMillis(), notificationIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
Notification notification = new Notification(icon,
this.mAdvData.getAdvTitle(), System.currentTimeMillis());
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.defaults |= Notification.DEFAULT_LIGHTS;
notification.setLatestEventInfo(mContext,
this.mAdvData.getAdvTitle(), this.mAdvData.getAdvContent(),
contentIntent);
Bitmap iconBitmap = Tools.getLocalBitmap(String_iconPath);
if (iconBitmap != null) {
notification.contentView.setImageViewBitmap(iconID, iconBitmap);
}
NotificationManager mNotificationManager = (NotificationManager) mContext
.getSystemService("notification");
mNotificationManager.notify(this.INT_NOTIFIID, notification);
最主要的就是这个iconID。用这个可以给notification的icon赋值。
还有就是Intent.FLAG_ACTIVITY_CLEAR_TASK。如果主程序为退出(就是用home退的软件)的时候点击通知栏会带出应用。加上这个Flag可以避免这种情情况。什么原因我这儿不细说了。可以Google下。