Android种使用Notification实现通知管理以及自定义通知栏(示例四)

示例一:实现通知栏管理

当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的。例如我们手机的短信系统,当不断有新消息传来时,我们的通知栏仅仅是更改传来短信的数目,而不是对每条短信单独做一个通知栏用于提示。

修改通知

可以设置一条通知,当然可以更新一条通知,我们通过在调用NotificationManager.notify(ID, notification)时所使用的ID来更新它。为了更新你之前发布的通知,你需要更新或者创建一个NotificationCompat.Builder对象,从之前的通知中创建一个Notification对象,然后发布它使用你之前使用的ID。如果之前的通知仍然可见,系统将直接更新通知的内容,如果之前的通知不可见了,一条新的通知将被创建。

下面的代码演示了更新,以反映已发生的事件数量的通知。 它叠加通知,显示的摘要:

(注意演示,通知数量会累积而且点击通知后通知栏消失)

这里我们不再演示点击按钮以及跳转页面的布局文件,直接上java实现代码:

 1 import android.app.Notification;
 2 import android.app.NotificationManager;
 3 import android.app.PendingIntent;
 4 import android.content.Context;
 5 import android.content.Intent;
 6 import android.graphics.BitmapFactory;
 7 import android.support.v7.app.AppCompatActivity;
 8 import android.os.Bundle;
 9 import android.support.v7.app.NotificationCompat;
10 import android.view.View;
11 import android.widget.RemoteViews;
12 public class MainActivity extends AppCompatActivity {
13     private static final int NO_1 = 0x1;
14     int num =1;//初始通知数量为1
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19     }
20     //按钮点击事件(通知栏)
21     public void show1(View v){
22         NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
23         builder.setSmallIcon(R.mipmap.ic_launcher);
24         builder.setContentTitle("新消息");
25         builder.setContentText("你有一条新的消息");
26         builder.setNumber(num++);
27         //设置点击通知跳转页面后,通知消失
28         builder.setAutoCancel(true);
29         Intent intent = new Intent(this,Main2Activity.class);
30         PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
31         builder.setContentIntent(pi);
32         Notification notification = builder.build();
33         NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
34         notificationManager.notify(NO_1,notification);
35     }
36 }

当我们设置setAutoCancel()为false时,显示效果如下(点击后通知栏不消失)

示例二:自定义通知栏

通知的框架允许你去自定义通知的布局。通过RemoteViews对象来定义通知的外观。自定义通知布局与常规通知相似,但是它是基于定义在XML文件的RemoteViews对象来操作的。

自定义通知的可用高度是取决于通知视图的。正常的视图布局高度限制在64dp,可展开视图的布局高度限制在256dp

为了去定义自己的通知布局,从扩充XML文件获取一个RemoteViews对象的实例开始。然后,类似于调用setContentTitle()方法一样,我们需要调用setContent()。为了能设置更多细节,我们使用RemoteViews对象的方法来设置更多的内容。

1.创建一个单独的XML文件,用来定义通知的布局。你可以使用任何你想用的名字,但后缀必须是.xml。

2.在应用里面,使用RemoteViews对象的方法来给你的通知设置文本和图标,通过调用setContent()把你的RemoteViews对象放到NotificationCompat.Builder里面。避免使用背景图像,因为你的文本可能会变得不太好阅读。

RemoteViews对象也包含一些方法用来给你去添加Chronometer和ProgressBar。想要了解更多自定义通知条布局的事情,参考RemoteViews的文档。

注意:当你使用自定义的通知条的时候,特别要注意你自定义的通知条在不同方向与分辨率的设备上是如何工作的。当然这条建议对所有的视图布局都很重要。但对通知条来说是尤其重要的,因为通知抽屉的控件十分的有限。不要把自己的通知条做的太复杂,确保它的灵活性。

为自定义的通知条文本使用样式资源(Usingstyle resources for custom notification text)

自定义通知条的时候总是使用样式资源去定义文本。通知的背景颜色会变得与设备与当前版本的android有很大的反差。使用样式文件能帮你很好的解决这一点。从Android 2.3开始,系统就为标准的通知布局定义了文本的样式,如果你在Android2.3 以及其更高的版本上使用同样的样式,你必须确保你的文本相对于背景是可以看见的。

注意:

Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件,不支持这些类的子类或Android提供的其他控件。否则会引起ClassNotFoundException异常。

带按钮的布局相应点击事件在3.0以下版本不启作用。

下面简单演示自定义音乐播放notification(未设置setongoing常驻):

Layout中message.xml(自定义布局):

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="horizontal" android:layout_width="match_parent"
 4     android:layout_height="wrap_content"
 5     android:gravity="center">
 6     <ImageView
 7         android:id="@+id/iv"
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:src="@mipmap/ic_launcher"/>
11     <TextView
12         android:id="@+id/tv"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:layout_weight="1"
16         android:gravity="center"
17         android:text="仗剑走天涯"/>
18     <Button
19         android:id="@+id/btn1"
20         android:layout_width="wrap_content"
21         android:layout_height="wrap_content"
22         android:text="播放"/>
23     <Button
24         android:id="@+id/btn2"
25         android:layout_width="wrap_content"
26         android:layout_height="wrap_content"
27         android:text="下一首"/>
28 </LinearLayout>

MainActivity对应java实现代码的MainActivity.java(只演示点击事件):

 1  public void show2(View v){
 2         NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
 3         builder.setSmallIcon(R.mipmap.guojia);
 4         RemoteViews rv = new RemoteViews(getPackageName(),R.layout.message);
 5         rv.setTextViewText(R.id.tv,"泡沫");//修改自定义View中的歌名
 6         //修改自定义View中的图片(两种方法)
 7 //        rv.setImageViewResource(R.id.iv,R.mipmap.ic_launcher);
 8         rv.setImageViewBitmap(R.id.iv, BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher));
 9         builder.setContent(rv);
10         Notification notification = builder.build();
11         NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
12         notificationManager.notify(NO_2,notification);
13     }

至此notification相关知识点就总结完了,谢谢大家关注,晚安

相关链接:

Android中使用Notification实现普通通知栏(Notification示例一)

Android中使用Notification实现宽视图通知栏(Notification示例二)

Android中使用Notification实现进度通知栏(示例三)

时间: 2024-10-14 12:28:32

Android种使用Notification实现通知管理以及自定义通知栏(示例四)的相关文章

Android基础入门教程——2.5.2 Notification(状态栏通知)详解

Android基础入门教程--2.5.2 Notification(状态栏通知)详解 标签(空格分隔): Android基础入门教程 本节引言: 本节带来的是Android中用于在状态栏显示通知信息的控件:Notification,相信大部分 学Android都对他都很熟悉,而网上很多关于Notification的使用教程都是基于2.x的,而 现在普遍的Android设备基本都在4.x以上,甚至是5.0以上的都有:他们各自的Notification 都是不一样的!而本节给大家讲解的是基于4.x以

android 实现自己定义状态栏通知(Status Notification)

在android项目的开发中,有时为了实现和用户更好的交互,在通知栏这一小小的旮旯里,我们通常须要将内容丰富起来,这个时候我们就须要去实现自己定义的通知栏,比如以下360或者网易的样式: 首先我们要了解的是 自己定义布局文件支持的控件类型:Notification的自己定义布局是RemoteViews,因此,它仅支持FrameLayout.LinearLayout.RelativeLayout三种布局控件,同一时候支持AnalogClock.Chronometer.Button.ImageBut

Android学习—Notification消息通知

最近在项目中需要使用消息通知,自己把它封装成了一个方法,需要的时候方便调用, 下面对Notification类中的一些常量,字段,方法简单介绍一下: 常量: DEFAULT_ALL    使用所有默认值,比如声音,震动,闪屏等等 DEFAULT_LIGHTS 使用默认闪光提示 DEFAULT_SOUNDS 使用默认提示声音 DEFAULT_VIBRATE 使用默认手机震动 [说明]:加入手机震动,一定要在manifest.xml中加入权限: <uses-permission android:na

android开发之notification通知完全解析

android开发之notification通知完全解析 本文主要介绍的是notification通知的使用,通过阅读此文,你可以了解,在android开发中,notification通知各种使用方法.本文的notification主要是针对android4.4以下的版本. 现在,我们来看一下,如何实现一个notification.估计大家现在最常用的做法是下面这种: Notification notification = new Notification(R.drawable.ic_launc

android 的通知管理

1在context里定义通知管理器(NotificationManager) NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); 2.定义和创建通知(Notification),并且设置相应的参数:通知标题,通知内容,通知时间,通知要调用的(灯光,声音,震动等..) Notification notification = ne

Android中使用Notification在状态栏上显示通知

场景 状态栏上显示通知效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建NotificationActivity,通过getSystemService方法获取通知管理器. 然后创建通知并设置通知的一些属性,再使用通知管理器发送通知. package com.badao.relativelayouttest; import androidx.annotation.Req

Android开发之Notification

Android Notification在每一个Android应用开发中基本都会遇到,它可以按指定的规则向用户推送一些消息,是一项非常实用的功能.本文主要介绍了Android Notification 用法的4种形式,希望可以对各位Android开发者有所帮助. 实现通知一般有以下几个步骤: 1.获取通知服务对象NotificationManager 2.建立Notification对象 3.关联intent 4.执行通知 Notification一般有几种用途:,如下图 1.启动多次通知但只显

Notification(通知) 简单用法

Notification(通知) 是应用程序提醒用户某件事情已经发生了的一种方式,可以在“状态栏”和“通知托盘”中看到它.如我们更新程序的时候,可以通过Notification来实现下载进度. Notification 可以有以下动作来增强用户提醒: 1.在状态栏中显示图标. 2.灯光:手机LED呼吸灯闪烁 3.发出声音提醒. 4.手机震动. 5.在通知托盘中显示更多的信息 一,创建Notification Notification需要使用NotificationManager来管理.Notif

Android系统应用---Notification之一:Notification概述及使用

通知机制 是Android和用户交互,提高APP活跃度的重要手段,可以将一些重要的信息通过通知展示给用户,比如说新的聊天消息或者日历事件.Notification的设计理念是既将重要的信息告知用户又不会打断用户当前的行为,如果信息使用户关注的,用户会点击主动去执行相关的操作,对于一个APP来说,通知也不可以滥用,否则冗余的消息通知只会疏远你的用户. 通知可以分为ToastNotification和StatusBarNotification,Toast相对简单,我们主要研究的的是StatusBar