Android系列教程(1):Notification 与状态栏信息-阿里云开发者社区

开发者社区> geekori> 正文

Android系列教程(1):Notification 与状态栏信息

简介: 本文为《Android/OPhone 开发完全讲义》的内容连载,如需转载,请注明作者和出处,谢谢! 源代码下载     Notification 与 Toast 都可以起到通知、提醒的作用。
+关注继续查看

本文为《Android/OPhone 开发完全讲义》的内容连载,如需转载,请注明作者和出处,谢谢!

源代码下载

    Notification Toast 都可以起到通知、提醒的作用。但它们的实现原理和表现形式却完全不一样。 Toast 其实相当于一个组件( Widget )。有些类似于没有按钮的对话 框。而 Notification 是显示在屏幕上方状态栏中的信息。还有就是 Notification 需要用 NotificationManager 来管理,而 Toast 只需要简单地创建 Toast 对象即可。

下面来看一下创建并显示一个 Notification 的步骤。创建和显 示一个 Notification 需要如下 5 步:

1.  通过 getSystemService 方法获得一个 NotificationManager 对象。

2.  创建一个 Notification 对象。每一个 Notification 对应一个 Notification 对象。在这一步需要设置显示在屏幕上方状态栏的通知消息、通知消息前方的图像资源 ID 和发出通知的时间。一般为当前时间。

3.  由于 Notification 可以与应用程序脱离。也就是说,即使应用程序被关闭, Notification 仍然会显示在状态栏 中。当应用程序再次启动后,又可以重新控制这些 Notification 。如清除或替换它们。因此,需要创建一个 PendingIntent 对象。该对象由 Android 系统负责维护,因此,在应用程序关闭后,该对象仍然不会被释放。

4.  使用 Notification 类的 setLatestEventInfo 方法设置 Notification 的详细信息。

5.  使用 NotificationManager 类的 notify 方法显示 Notification 消息。在这一步需要指定标识 Notification 的唯一 ID 。这个 ID 必须相对于同一个 NotificationManager 对象是唯一的,否则就会覆盖相同 ID Notificaiton

心动不如行动,下面我们来演练一下如何在状 态栏显示一个 Notification ,代码如下:

    上面的 5 行代码正好对应创建和显示 Notification 5 步。在这里要解释一下的是 notify 方法的第 1 个参数。这个参数实际上表示了 Notification ID 。是一个 int 类型的值。为了使这个值唯一,可以使用 res 目录中的某些资源 ID 。例如,在上面的代码中使用了当前 Notification 显示的图像对应的 资源 ID R.drawable.icon )作为 Notification ID 。当然,读者也可以使用其他的值作为 Notification ID 值。

     由于创建和显示多个 Notification 的代码类似,因 此,在本节的例子中编写了一个 showNotification 方法来显示 Notification ,代码如下:

  1. private void showNotification(String tickerText, String contentTitle, String contentText, int id, int resId)  
  2. {  
  3.     Notification notification = notification = new Notification(resId, tickerText, System.currentTimeMillis());  
  4.     PendingIntent contentIntent = PendingIntent.getActivity(this0, getIntent(), 0);  
  5.     notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);  
  6.     //  notificationManager是在类中定义 的 NotificationManager变量。在onCreate方法中已经创建  
  7.     notificationManager.notify(id, notification);  
  8. }  
private void showNotification(String tickerText, String contentTitle, String contentText, int id, int resId) { Notification notification = notification = new Notification(resId, tickerText, System.currentTimeMillis()); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, getIntent(), 0); notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent); // notificationManager是在类中定义的 NotificationManager变量。在onCreate方法中已经创建 notificationManager.notify(id, notification); }


下面的代码使用 showNotification 方法显示了 3 Notification 消息。

  1. showNotification("今天非常高兴""今天考试 得了全年级第一",  
  2.         "数学100分、语文99分、英语100分,yeah!", R.drawable.smile, R.drawable.smile);  
  3. showNotification("这是为什么呢?""这道题为什么会出错呢?"" 谁有正确答案啊.",  
  4.         R.drawable.why, R.drawable.why);  
  5. showNotification("今天心情不好""也不知道为什么,这几天一直很郁闷.""也许应该去公园散心了",  
  6.         R.drawable.why, R.drawable.wrath);  
showNotification(" 今天非常高兴", "今天考试得了全年级第一", "数学100分、语文99分、英语100分,yeah!", R.drawable.smile, R.drawable.smile); showNotification("这是为什么呢?", "这道题为什么会出错呢?", "谁有正确答案啊.", R.drawable.why, R.drawable.why); showNotification("今天心情不好", "也不知道为什么,这几天一直很郁闷.", "也许应该去公园散心了", R.drawable.why, R.drawable.wrath);

    其中第 2 个和第 3 Notification 使用的是同一个 ID R.drawabgle.why ),因此,第 3 Notification 会覆盖第 2 Notification 在显示 Notification 时还可以设置显示通 知时的默认发声、震动和 Light 效果。要实现这个功能需要设置 Notification 类的 defaults 属性,代码如下:
  1. notification.defaults = Notification.DEFAULT_SOUND;        //  使用默认的声音  
  2. notification.defaults = Notification.DEFAULT_VIBRATE;        //  使用默认的震动  
  3. notification.defaults = Notification.DEFAULT_LIGHTS;        //  使用默认的Light  
  4. notification.defaults = Notification.DEFAULT_ALL;            //  所有的都使用默认值  
notification.defaults = Notification.DEFAULT_SOUND; // 使用默认的声音 notification.defaults = Notification.DEFAULT_VIBRATE; // 使用默认的震动 notification.defaults = Notification.DEFAULT_LIGHTS; // 使用默认的Light notification.defaults = Notification.DEFAULT_ALL; // 所有的都使用默认值

   注意:设置默认发声、震动和 Light 的方法是 setDefaults 。该 方法与 showNotification 方法的实现代码基本相同,只是在调用 notify 方法之前需要设置 defaults 属性( defaults 属性必须在 调用 notify 方法之前调用,否则不起作用)。在设置默认震动效果时还需要在 AndroidManifest.xml 文件中通过 <uses-permission> 标签设置 android.permission.VIBRATE 权限。

    如果要清除某个消息,可以使用 NotificationManager 类 的 cancel 方 法,该方法只有一个参数,表示要清除的 Notification ID 。使用 cancelAll 可以清除当前 NotificationManager 对象中的所有 Notification

    运行本节的例子,单击屏幕上显示 Notification 的按钮,会显示如 图1 所示的消息。每一个消息会显示一会,然后就只显示整个 Android 系统(也包括其他应用程序) 的 Notification (只显示图像部分)。如图2 所示。如果将状态栏拖下来,可以看 到 Notification 的详细信息和发出通知的时间(也就是 Notification 类的构造方法的第 3 个参数值),如图3 所 示。当单击【清除通知】按钮,会清除本应用程序显示的所有 Notification ,清除后的效果如图4 所示。

                  图1

                    图2

                  图3

                 图4

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
异常信息: ResultSet can not re-read row data for column 2
解决方法:下面的解决方案是网上高人说的:                    (1)如果采用jdbc-odbc驱动,那么就必须按照查询顺序来一次读取(不论有没有image或text类型)           (2)如果采用微软提供的ms sql server jdbc driver,...
554 0
移动端信息无障碍技术方案全解:以手淘为例
目前中国有1700多万视障人士,他们渴望购物,也希望在任何情况下都能平等的获取他们想要的信息,手淘作为全国最大的购物 App,我们也希望通过技术让视障消费者能更好的享受移动互联带来的便利,这既是公益,也是义务。 本文将和大家分享手淘在使用 DinamicX 支持无障碍的技术方案,并给出了相关示例,希望对移动端开发者有所启发。
51 0
Android开发学习之使用Toolbar实现不同的Fragment使用不同颜色的标题栏与状态栏
Android开发学习之使用Toolbar实现不同的Fragment使用不同颜色的标题栏与状态栏                                            先看效果图。
2307 0
Android开发3——查看和输出日志信息
一、错误级别 Error &gt; Warn &gt; Info &gt; Debug &gt; Verbose(冗余)     二、Android项目日志查看视图 Console视图只能看项目的部署到模拟器上的信息,开发日志信息只能在LogCat视图上看。在LogCat视图上有按钮可以进行错误级别的筛选。比如点击Info按钮,会显示错误级别大于等于Info级别的日志信息。  
864 0
android(cm11)状态栏源码分析(一)
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/50216563 (一):写在前面 最近由于工作需要,需要了解CM11中的有关于StatusBar相关的内容。
950 0
Android屏幕适配之状态栏导航栏半透明、全透明(5.0以上去阴影),方法多样
1.1 StatusBar半透明用StatusBarView实现(4.4以上有效) 1.2 StatusBar半透明用setStatusBarColor实现(5.0以上有效) 2.1 StatusBar全透明用fitSystemWindows实现(4.
3936 0
《手机测试Robotium实战教程》—第2章2.5节Genymotion
如果读者使用过Android自带的模拟器,应该会对它有深刻印象,本章主要介绍一个非自带的模拟器Genymotion。 它启动快,也很容易使用。它提供收费版本的同时,也提供免费的版本。
1095 0
+关注
geekori
欧瑞科技创始人&amp;CEO,东北大学计算机专业硕士,拥有超过20年软件开分经验。欧瑞学院金牌讲师、51CTO学院金牌讲师、CSDN学院特约讲师、畅销书作者,企业内训讲师。曾出版过超过30本IT畅销书,涉猎移动开发、跨平台开发、机器学习、区块链、大数据、编译器等领域。
419
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载