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

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" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android中,我们可以使用`NotificationCompat`来创建通知通知可以根据需要展开或收缩。当通知被展开时,我们可以自定义通知布局,并添加一些交互式组件,例如按钮、文本框等。 为了监听通知的展开和收缩事件,我们需要使用`NotificationCompat`提供的`setCustomBigContentView()`和`setCustomContentView()`方法,分别设置通知展开和收缩时的自定义布局。然后,我们可以在自定义布局中添加相应的交互式组件,并为其添加监听器。 示例代码: ``` // 创建通知的Builder NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setAutoCancel(true); // 创建通知展开时的自定义布局 RemoteViews expandedView = new RemoteViews(getPackageName(), R.layout.notification_expanded); // 添加监听器 expandedView.setOnClickPendingIntent(R.id.button1, pendingIntent1); expandedView.setOnClickPendingIntent(R.id.button2, pendingIntent2); // 设置通知展开时的自定义布局 builder.setCustomBigContentView(expandedView); // 创建通知收缩时的自定义布局 RemoteViews collapsedView = new RemoteViews(getPackageName(), R.layout.notification_collapsed); // 添加监听器 collapsedView.setOnClickPendingIntent(R.id.button, pendingIntent); // 设置通知收缩时的自定义布局 builder.setCustomContentView(collapsedView); // 发送通知 NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(notificationId, builder.build()); ``` 在上面的代码中,我们创建了一个通知的Builder,并设置了通知展开和收缩时的自定义布局。为了监听自定义布局中的按钮点击事件,我们使用`setOnClickPendingIntent()`方法为按钮添加了相应的`PendingIntent`。当用户点击按钮时,相应的`PendingIntent`会被触发。 需要注意的是,在自定义布局中添加的交互式组件的ID必须与布局文件中定义的ID一致。否则,添加的监听器将不会生效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值