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

来源:互联网 发布:unity3d fbx 编辑:程序博客网 时间:2024/05/23 20:46

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" />
原创粉丝点击