Notification的使用(自定义Notification布局)

xiaoxiao2021-02-28  78

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" />
转载请注明原文地址: https://www.6miu.com/read-78198.html

最新回复(0)