1、notification的基本的使用
private void sendNotification() {
//获取NotificationManager实例
NotificationManager notifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//实例化NotificationCompat.Builde并设置相关属性
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
//设置小图标
builder.setSmallIcon(R.mipmap.ic_launcher);
//设置通知标题
builder.setContentTitle("标题");
//设置通知内容
builder.setContentText("这是内容");
Notification notification = builder.build();
// 设置常驻 Flag
//notification.flags = Notification.FLAG_ONGOING_EVENT;
notifyManager.notify(1, notification);
}
给notification设置flag为Notification.FLAG_ONGOING_EVENT,则这个notification会变成常驻型的notification.
效果图如下:
2、自定义notification的布局
1、点击notification跳转到activity
notification_1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="@+id/linear_1">
<Button
android:id="@+id/btn_1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="44dp"
android:text="btn_1"/>
<Button
android:id="@+id/btn_2"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="44dp"
android:text="btn_2"/>
<Button
android:id="@+id/btn_3"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="44dp"
android:text="btn_3"/>
</LinearLayout>
携带不同的数据跳转到SecondActivity
private void sendNotification() {
//使用RemoteViews来定义通知栏的界面
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_1);
//设置字体颜色
contentView.setTextColor(R.id.btn_1,getResources().getColor(R.color.colorAccent));
Intent notificationIntent = new Intent(this,SecondActivity.class);
//携带的数据
notificationIntent.putExtra("flags", "btn_1");
PendingIntent contentIntent = PendingIntent.getActivity(this, 1, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
//当点击id为btn_1的控件时,跳转到SecondActivity
contentView.setOnClickPendingIntent(R.id.btn_1, contentIntent);
//携带的数据
notificationIntent.putExtra("flags", "btn_2");
contentIntent = PendingIntent.getActivity(this, 2, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
//当点击id为btn_1的控件时,跳转到SecondActivity
contentView.setOnClickPendingIntent(R.id.btn_2, contentIntent);
//携带的数据
notificationIntent.putExtra("flags", "btn_3");
contentIntent = PendingIntent.getActivity(this, 3, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
//当点击id为btn_1的控件时,跳转到SecondActivity
contentView.setOnClickPendingIntent(R.id.btn_3, contentIntent);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContent(contentView);
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification no = builder.build();
no.flags = Notification.FLAG_ONGOING_EVENT; // 设置常驻 Flag
nm.notify(233, no);
}
2、点击notification来发送广播
private void sendNotification() {
//使用RemoteViews来定义通知栏的界面
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_1);
//设置字体颜色
contentView.setTextColor(R.id.btn_1,getResources().getColor(R.color.colorAccent));
Intent notificationIntent = new Intent();
//设置action
notificationIntent.setAction("com.xq.broadcast");
//携带的数据
notificationIntent.putExtra("flags", "btn_1");
PendingIntent contentIntent = PendingIntent.getBroadcast(this, 1, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
contentView.setOnClickPendingIntent(R.id.btn_1, contentIntent);
//携带的数据
notificationIntent.putExtra("flags", "btn_2");
contentIntent = PendingIntent.getBroadcast(this, 2, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
contentView.setOnClickPendingIntent(R.id.btn_2, contentIntent);
//携带的数据
notificationIntent.putExtra("flags", "btn_3");
contentIntent = PendingIntent.getBroadcast(this, 3, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
contentView.setOnClickPendingIntent(R.id.btn_3, contentIntent);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContent(contentView);
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification no = builder.build();
no.flags = Notification.FLAG_ONGOING_EVENT; // 设置常驻 Flag
nm.notify(233, no);
}
定义一个广播接收器
public class NotificaionBroadcastReceiver extends BroadcastReceiver {
private RemoteViews contentView;
private NotificationCompat.Builder builder;
private NotificationManager nm;
@Override
public void onReceive(Context context, Intent intent) {
contentView = new RemoteViews(context.getPackageName(), R.layout.notification_1);
builder = new NotificationCompat.Builder(context);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContent(contentView);
nm = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
if (intent != null) {
String s = intent.getStringExtra("flags");
Log.v("xq_msg", "s: " + s);
//收到广播后改变字体颜色
contentView.setTextColor(R.id.btn_2, context.getResources().getColor(R.color.colorAccent));
nm.notify(233, builder.build());
}
}
}
在android的manifest中声明广播
<receiver android:name=".NotificaionBroadcastReceiver">
<intent-filter>
<action android:name="com.xq.broadcast" />
</intent-filter>
</receiver>
3、点击notification来发送启动服务
private void sendNotification() {
//使用RemoteViews来定义通知栏的界面
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_1);
//设置字体颜色
contentView.setTextColor(R.id.btn_1,getResources().getColor(R.color.colorAccent));
Intent notificationIntent = new Intent(this,NotificationService.class);
//设置action
notificationIntent.setAction("com.xq.broadcast");
//携带的数据
notificationIntent.putExtra("flags", "btn_1");
PendingIntent contentIntent = PendingIntent.getService(this, 1, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
contentView.setOnClickPendingIntent(R.id.btn_1, contentIntent);
//携带的数据
notificationIntent.putExtra("flags", "btn_2");
contentIntent = PendingIntent.getService(this, 2, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
contentView.setOnClickPendingIntent(R.id.btn_2, contentIntent);
//携带的数据
notificationIntent.putExtra("flags", "btn_3");
contentIntent = PendingIntent.getService(this, 3, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
contentView.setOnClickPendingIntent(R.id.btn_3, contentIntent);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContent(contentView);
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification no = builder.build();
no.flags = Notification.FLAG_ONGOING_EVENT; // 设置常驻 Flag
nm.notify(233, no);
}
定义一个服务
public class NotificationService extends Service {
private RemoteViews contentView;
private NotificationCompat.Builder builder;
private NotificationManager nm;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
contentView = new RemoteViews(getPackageName(), R.layout.notification_1);
builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContent(contentView);
nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (intent != null) {
String s = intent.getStringExtra("flags");
Log.v("xq_msg", "s: " + s);
//改变字体颜色
contentView.setTextColor(R.id.btn_2, getResources().getColor(R.color.colorAccent));
nm.notify(233, builder.build());
}
return super.onStartCommand(intent, flags, startId);
}
}
在android的manifest中声明服务
<service android:name=".NotificationService" />