简单Notification
- 创建Builder
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("My notification")
.setContentText("Hello World!");
- 添加Active
// 2. 创建点击回调动作
Intent resultIntent = new Intent(this, ResultActivity.class);
// Because clicking the notification opens a new ("special") activity, there's
// no need to create an artificial back stack.
PendingIntent resultPendingIntent =
PendingIntent.getActivity(
this,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
- 通知
// Builds the notification and issues it.
mNotifyMgr.notify(101, mBuilder.build());
- 后台调用
// Creates an Intent for the Activity
Intent resultIntent = new Intent(this, ResultActivity.class);
// Sets the Activity to start in a new, empty task
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Creates the PendingIntent
notifyIntent = PendingIntent.getActivity(
this,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
移除Notification
- 调用后自动清除
builder.setAutoCancel(true);
- 指定的 notification ID调用了cancel()
- 指定的 notification ID调用了cancelAll()
接下来的几个样式就不说了,简单,先贴图再看代码
BigView之Text
- 调用
bigTextNotification
BigView之Picture
- 调用
bigPictureNotification
BigView之Inbox
- 调用
bigInboxNotification
BigView之Custom
- 调用
customNotification
- 大图
- 小图
- 大图
Code
代码部分
package com.xuie.notificationdemo;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Binder;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.widget.RemoteViews;
public class MyService extends Service {
PendingIntent notifyIntent;
NotificationManager mNotificationManager;
@Override
public void onCreate() {
super.onCreate();
// Creates an Intent for the Activity
Intent resultIntent = new Intent(this, ResultActivity.class);
// Sets the Activity to start in a new, empty task
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Creates the PendingIntent
notifyIntent = PendingIntent.getActivity(
this,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
// Notifications are issued by sending them to the
// NotificationManager system service.
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Builds an anonymous Notification object from the builder, and
// passes it to the NotificationManager
IntentFilter filter = new IntentFilter();
filter.addAction(REMOTE_PLAY);
filter.addAction(REMOTE_NEXT);
filter.addAction(REMOTE_PREVIOUS);
registerReceiver(receiver, filter);
}
public void startNotification() {
// Instantiate a Builder object.
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
// Puts the PendingIntent into the notification builder
builder.setContentIntent(notifyIntent);
builder.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Service Notification")
.setContentText("Hello World!");
// 设置自动清除Notification。其它方法:指定的 notification ID调用了cancel(),或cancelAll()
builder.setAutoCancel(true);
mNotificationManager.notify(101, builder.build());
}
public void bigTextNotification() {
NotificationCompat.BigTextStyle textStyle = new NotificationCompat.BigTextStyle()
.setBigContentTitle("BigTextContentTitle")
.setSummaryText("SummaryText")
.bigText("I am Big Text!");
Notification notification = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setTicker("show big view text") // 第一次提示消息的时候显示在通知栏上
.setContentInfo("content info")
.setContentTitle("ContentTitle").setContentText("ContentText")
.setStyle(textStyle)
.setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
.setContentIntent(notifyIntent)
.setAutoCancel(true)
.build();
mNotificationManager.notify(101, notification);
}
public void bigPictureNotification() {
NotificationCompat.BigPictureStyle pictureStyle = new NotificationCompat.BigPictureStyle()
.setBigContentTitle("BigPictureContentTitle")
.setSummaryText("SummaryText")
.bigPicture(resource2Bitmap(this, R.mipmap.ic_big_view));
Notification notification = new NotificationCompat.Builder(this)
.setLargeIcon(resource2Bitmap(this, R.mipmap.ic_big_view))// 这个与setSmallIcon相冲? - 测试手机Nexus5
.setSmallIcon(R.mipmap.ic_launcher)
.setTicker("show big view picture")
.setContentInfo("content info")
.setContentTitle("ContentTitle")
.setContentText("ContentText")
.setStyle(pictureStyle)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.build();
mNotificationManager.notify(101, notification);
}
public void bigInboxNotification() {
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.setBigContentTitle("BigInboxContentTitle").setSummaryText("SummaryText");
for (int i = 0; i < 5; i++) {
inboxStyle.addLine("news" + i);
}
Notification notification = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setTicker("show big inbox picture")
.setContentInfo("content info")
.setContentTitle("ContentTitle")
.setContentText("ContentText")
.setStyle(inboxStyle)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.build();
mNotificationManager.notify(101, notification);
}
public void customNotification() {
PendingIntent playIntent = PendingIntent.getBroadcast(this, 0, new Intent(REMOTE_PLAY), PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent nextIntent = PendingIntent.getBroadcast(this, 0, new Intent(REMOTE_NEXT), PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent previousIntent = PendingIntent.getBroadcast(this, 0, new Intent(REMOTE_PREVIOUS), PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_notification);
remoteViews.setOnClickPendingIntent(R.id.play_pause, playIntent);
remoteViews.setImageViewResource(R.id.play_pause, R.mipmap.pause);
remoteViews.setOnClickPendingIntent(R.id.next, nextIntent);
remoteViews.setOnClickPendingIntent(R.id.previous, previousIntent);
RemoteViews remoteViews_expand = new RemoteViews(getPackageName(), R.layout.custom_expanded_notification);
remoteViews_expand.setOnClickPendingIntent(R.id.play_pause, playIntent);
remoteViews_expand.setOnClickPendingIntent(R.id.next, nextIntent);
remoteViews_expand.setOnClickPendingIntent(R.id.previous, previousIntent);
remoteViews_expand.setTextViewText(R.id.new_text, "New Add Layout");
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
// .setContentIntent(notifyIntent)
// .setOngoing(true)
.setAutoCancel(true)
.setTicker("music is playing");
Notification notification = builder.build();
notification.contentView = remoteViews;
notification.bigContentView = remoteViews_expand;
mNotificationManager.notify(102, notification);
}
public static final String REMOTE_PLAY = "remote play";
public static final String REMOTE_PREVIOUS = "remote previous";
public static final String REMOTE_NEXT = "remote next";
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(REMOTE_PLAY)) {
System.out.println("REMOTE_PLAY");
} else if (action.equals(REMOTE_NEXT)) {
System.out.println("REMOTE_NEXT");
} else if (action.equals(REMOTE_PREVIOUS)) {
System.out.println("REMOTE_PREVIOUS");
}
}
};
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
class MyBinder extends Binder {
MyService getService() {
return MyService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
public static Bitmap resource2Bitmap(Context context, int drawId) {
return BitmapFactory.decodeResource(context.getResources(), drawId);
}
}