Android中 RemoveView的使用和举例 —— 最全面的APP通知栏适配

本文详细介绍了Android中RemoveView的使用,特别是针对8.0及以上版本的通知栏适配。内容包括Android通知栏的基本操作、7.0及以下版本的使用方法,以及8.0系统引入的通知渠道概念,如何创建、管理和适配通知渠道。同时,文章探讨了通知渠道的重要性,以及为何需要进行适配。此外,还提到了桌面应用图标显示未读角标的方法。
摘要由CSDN通过智能技术生成

Android中 RemoveView的使用和举例 —— 最全面的APP通知栏适配(8.0通知栏适配)



下载完整演示代码,下载完整演示代码,下载完整演示代码





目录

1. remoteView 介绍

2. RemoteViews在通知栏上的应用

  2.1 通知栏消在7.0.0版本及其以下版本使用

  2.2 为8.0.0 及以上设备适配通知栏消息

    2.2.1 为什么要进行8.0通知栏适配?

    2.2.2 8.0系统的通知栏适配 —— 渠道概念的引入

    2.2.3 我一定要适配吗?

    2.2.4 创建通知渠道

    2.2.5 让通知显示出来

    2.2.6 管理通知渠道

3. 桌面应用图标显示未读角标

4. 下载完整演示代码




RemoteViews应该是一种远程View,与其这样不如叫远程服务可能比较好理解,但是远程View的确没听说过,其实它和远程Service是一样的,RemoteViews表示的是一个View结构,它可以在其他进程中显示,由于它在其他进程中显示,为了能够更新它的界面,RemoteViews提供了一组基础的操作用于跨进程更新它的界面。

RemoteViews在Android中的使用场景有两种:通知栏和桌面小部件;





1. remoteView 介绍

主要是通过NotificationManager的notify方法来实现的,它除了默认效果外,还可以另外定义布局。桌面小部件则是通过AppWidgetProvider来实现的AppWidgetProvider本质上是一个广播。通知栏和桌面小部件的开发过程中都会用到RemoteViews,它们在更新界面时无法像在Activity里面那样去直接更新View,这是因为二者的界面都运行在其他进程中,确切来说是系统的SystemServer进程。为了跨进程更新界面,RemoteViews提供了一系列set方法,并且这些方法只是View全部方法的子集,另外RemoteViews中所支持的View类型也是有限的



2. RemoteViews在通知栏上的应用

Notification,俗称通知,是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。

因为Android的快速发展,而Android的版本也快速的升级导致了一些兼容性的问题。对于Notification而言,Android3.0是一个分水岭,在其之前构建Notification推荐使用NotificationCompate.Builder,它位于android.support.v4.app.NotificationCompat.Builder,是一个Android向下版本的兼容包,而在Android3.0之后,一般推荐使用Notification.Builder构建。本博客主要介绍的是Android8.x的开发



2.1 通知栏消在7.0.0版本及其以下版本使用

使用系统默认的样式弹出一个通知是很简单的简单示例:

/**
 * 版本N之前发送通知消息
 */
private void showNotictionN() {
    Bitmap btm = BitmapFactory.decodeResource(getResources(),
            R.mipmap.image_a2);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            RemoteViewDemoActivity.this).setSmallIcon(R.mipmap.image_a3)
            .setContentTitle("a new message title")
            .setContentText("the context of the new message");
	//第一次提示消息的时候显示在通知栏上
    mBuilder.setTicker("New message");
    //设置桌面图标红点显示未读消息数为12,如果不需要显示红点请去掉这段代码
    mBuilder.setNumber(12);
    mBuilder.setLargeIcon(btm);
	//自己维护通知的消失
    mBuilder.setAutoCancel(true);

    //构建一个Intent
    Intent resultIntent = new Intent(RemoteViewDemoActivity.this, MainActivity.class);
    //封装一个Intent
    PendingIntent resultPendingIntent = PendingIntent.getActivity(
            RemoteViewDemoActivity.this, 0, resultIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    // 设置通知主题的意图
    mBuilder.setContentIntent(resultPendingIntent);
    //获取通知管理器对象

    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(0, mBuilder.build());
}
  • PendingIntent

对于一个通知而言,它显示的消息是有限的,一般仅用于提示一些概要信息。但是一般简短的消息,并不能表达需要告诉用户的全部内容,所以需要绑定一个意图,当用户点击通知的时候,调用一个意图展示出一个Activity用来显示详细的内容。而Notification中,并不使用常规的Intent去传递一个意图,而是使用PendingIntent。

先来说说Intent和PendingIntent的区别,PendingIntent可以看做是对Intent的包装,通过名称可以看出PendingIntent用于处理即将发生的意图,而Intent用来用来处理马上发生的意图。而对于通知来说,它是一系统级的全局通知,并不确定这个意图被执行的时间。当在应用外部执行PendingIntent时,因为它保存了触发应用的Context,使得外部应用可以如在当前应用中一样,执行PendingIntent里的Intent,就算执行的时候响应通知的应用已经被销毁了,也可以通过存在PendingIntent里的Context照常执行它,并且还可以处理Intent说带来的额外信息。

PendingIntent提供了多个静态的getXxx()方法,用于获得适用于不同场景的PendingIntent对象。一

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值