Android -- 系统和自定义Notification

简介:

Notification是一种让你的应用程序在不使用Activity的情况下警示用户,Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径。

作为UI部分,Notification对移动设备来说是最适合不过的了。用户可能随时都带着手机在身边。一般来说,用户会在后台打开几个程序,但不会注意它们。在这样的情形下,当发生需要注意的事件时,能够通知用户是很重要的。

Notification由NotificationManger统一管理,目前包含的能力有:

  • 创建一个状态条图标。
  • 在扩展的状态条窗口中显示额外的信息(和启动一个Intent)。
  • 闪灯或LED。
  • 电话震动。
  • 发出听得见的警告声(铃声,保存的声音文件)。

调用系统API的Notification                                                       

复制代码
public void click1(View view) {
        //1.获取系统通知的管理者
         NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        //2.初始化一个notification的对象
         Notification notification = new Notification(R.drawable.notification, "我是滚动的文本",  System.currentTimeMillis() );
        //3.设置notification的具体参数
         notification.flags = Notification.FLAG_AUTO_CANCEL;
        // notification.sound = Uri.parse(uriString);
         Intent intent = new Intent();
         intent.setAction(Intent.ACTION_VIEW);
         intent.setData(Uri.parse("http://www.baidu.com"));
         PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
         notification.setLatestEventInfo(this, "我是大的标题", "我是标题下面的内容", contentIntent);
         //4.直接把消息给 notification的管理者
         nm.notify(0, notification);
    }
复制代码

自定义Notification                                                                     

复制代码
public class MainActivity extends Activity {

    protected int mProgress;
    private Notification notification;
    private RemoteViews rv;
    private NotificationManager nm;
    private PendingIntent contentIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void clicklala(View view)
    {
        //1.获取系统通知的管理者
        nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        //2.初始化一个notification的对象
        long when = System.currentTimeMillis();
        String tickerText = "iiiipppp";
        notification = new Notification(R.drawable.ic_launcher,tickerText,when);
        //3.设置notification的具体参数
        //不能手动清理掉
        notification.flags = Notification.FLAG_AUTO_CANCEL;
        // notification.contentView = 自定义的notification view
        rv = new RemoteViews(getPackageName(), R.layout.notify);
        rv.setTextViewText(R.id.tv_rv, "我是自定义的notification");
        rv.setProgressBar(R.id.pb_rv, 100, 0, false);
        notification.contentView = rv;

        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("http://www.baidu.com"));
        contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
        notification.contentIntent = contentIntent;
        
        //4.直接把消息给 notification的管理者
        nm.notify(0, notification);

        // 启动多线程更新Notification提醒。 
        new Thread(new Runnable() {  
            public void run() {  
                for (int i = 0; i < 20; i++) {  
                    mProgress = (i + 1) * 5;  
                    try {  
                        if (i < 19) {  
                            Thread.sleep(1000);  
                        } else {  
                            Thread.currentThread().interrupt();  
                        }  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                    Message message = new Message();  
                    mHandler.sendMessage(message);  
                }  
            }  
        }).start();
    }
    private Handler mHandler = new Handler() {  
        public void handleMessage(Message message) {  

            //设置RemoteView组件中进度条的进度值。 
            rv.setProgressBar(R.id.pb_rv, 100, mProgress, false);  
            rv.setTextViewText(R.id.tv_rv, "Download:" + mProgress + "%");  
            //给Notification设置布局。  
            notification.contentView = rv;  
            /给Notification设置Intent,单击Notification会发出这个Intent。 
            notification.contentIntent = contentIntent;  
            //发送Notification提醒。   
            nm.notify(0, notification);  
            super.handleMessage(message);  
        }  
    };  
}
复制代码

布局:

复制代码
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
  xmlns:android="http://schemas.android.com/apk/res/android"  
  android:orientation="vertical"  
  android:layout_width="match_parent"  
  android:layout_height="match_parent">  
 <TextView   
  android:id="@+id/tv_rv"  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  android:text="haha"  
 />   
<ProgressBar   
  style="@android:style/Widget.ProgressBar.Horizontal"  
  android:id="@+id/pb_rv"  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
 />   
</LinearLayout>
复制代码

我是天王盖地虎的分割线                                                              

3

 

 

 

源代码:http://pan.baidu.com/s/1dD1Qx01

notification入门.zip

 

 




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3828941.html,如需转载请自行联系原作者

相关文章
|
22天前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
22天前
|
缓存 前端开发 Android开发
安卓开发中的自定义视图:从零到英雄
【10月更文挑战第42天】 在安卓的世界里,自定义视图是一块画布,让开发者能够绘制出独一无二的界面体验。本文将带你走进自定义视图的大门,通过深入浅出的方式,让你从零基础到能够独立设计并实现复杂的自定义组件。我们将探索自定义视图的核心概念、实现步骤,以及如何优化你的视图以提高性能和兼容性。准备好了吗?让我们开始这段创造性的旅程吧!
22 1
|
20天前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
7天前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
9天前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
22天前
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
54 16
|
15天前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。
|
1月前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
1月前
|
算法 JavaScript Android开发
|
1月前
|
安全 搜索推荐 程序员
深入探索Android系统的碎片化问题及其解决方案
在移动操作系统的世界中,Android以其开放性和灵活性赢得了广泛的市场份额。然而,这种开放性也带来了一个众所周知的问题——系统碎片化。本文旨在探讨Android系统碎片化的现状、成因以及可能的解决方案,为开发者和用户提供一种全新的视角来理解这一现象。通过分析不同版本的Android系统分布、硬件多样性以及更新机制的影响,我们提出了一系列针对性的策略,旨在减少碎片化带来的影响,提升用户体验。