Android基础知识(8)—Notification通知

来源:互联网 发布:sql replace 正则替换 编辑:程序博客网 时间:2024/05/29 03:29

Android基础知识(8)—Notification通知


  当我看到Notification通知的这个知识点时,我就确定了下一个学习内容就是它了。在我印象中Notification通知是个有趣的机制,比如说我手机上有新闻类的APP,当有热门的信息时,APP就会推送消息给我,而我选择是否查看。当然,如果是我感兴趣的内容 我就会点进去看。接下来详细学习Notification。



Notification通知简介:

  Notification,俗称通知,是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。
  注意:因为一些Android版本的兼容性问题,对于Notification而言,Android3.0是一个分水岭,在其之前构建Notification推荐使用Notification.Builder构建,而在Android3.0之后,一般推荐使用NotificationCompat.Builder构建。

Notification通知功能作用:

1.显示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信);
2.显示客户端的推送消息(如有新版本发布,广告,推荐新闻等);
3.显示正在进行的事物(例如:后台运行的程序)(如音乐播放器、版本更新时候的下载进度等);


Notification通知基本用法:

  通知的用法还是比较灵活的,既可以在活动里创建,也可以广播接收器里面创建,当然也可以在服务里面创建。相比于后两者,在活动里面创建的实际情况还是比较少的,因为一般只有当程序进入到后台的时候才需要使用通知。不过,无论是在哪创建通知,整体的步骤都是大致相同。
  实现默认通知的详细步骤:首先创建NotificationManager 来对通知进行管理,可以调用Context的getSystemService()方法来取到,再传入NOTIFICATION_SERVICE来确定取得系统哪个服务。

  NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  这个时候需要创建一个Notification对象,用于承载通知的内容。但是一般在实际使用过程中,一般不会直接构建Notification对象,而是使用它的一个内部类NotificationCompat.Builder来实例化一个对象(Android3.0之下使用Notification.Builder)。

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(MainActivity.this);
  并对Builder进行配置各种属性:

                        mBuilder.setContentTitle("this is setContentTitle text")<pre name="code" class="java">                        .setContentText("this is setContentText text")                        .setSmallIcon(R.drawable.a1)                        .setTicker("New Message")                        //.setNumber(number) //设置通知集合的数量                        .setNumber(12)                        .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消                        .setLargeIcon(btm);
  接下来:设置点击效果PendingIntent,在设置之前先来介绍PendingIntent,从名字上看起来有点像Intent,他们之间也确实处存在着不少相同点。Intent是立即执行某个动作,而PendingIntent是在某个何时的时机去执行某个动作。主要用于远程服务通信、闹铃、通知、启动器、短信中,在一般情况下用的比较少。PendingIntent的用法很简单,它主要提供几个静态的方法用于获取PendingIntent,可以根据需求来选择getActivity()、getBroadcast()、getServise()方法,第一个参数是Context,第二个一般用不着,传个0就好,第三个是一个Intent参数,第四个参数用于确定PendingIntent的行为:
  • FLAG_ONE_SHOT:表示返回的PendingIntent仅能执行一次,执行完后自动取消;
  • FLAG_NO_CREATE:表示如果描述的PendingIntent不存在,并不创建相应的PendingIntent,而是返回NULL;
  • FLAG_CANCEL_CURRENT:表示相应的PendingIntent已经存在,则取消前者,然后创建新的PendingIntent;(可用于即时消息情况)
  • FLAG_UPDATE_CURRENT:表示更新的PendingIntent;

                // 构建一个Intent                Intent intent = new Intent(MainActivity.this, NotificationActivity.class);                // 封装一个PendingIntent                PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);mBuilder.setContentIntent(pi);

  完成以上工作后,只需要调用NotificationManager的notify()方法就可以让通知显示出来,notify()方法接收两个参数:第一个参数是id,保证每个通知所指定的id都是不同的。第二个参数是Notification对象,这样就完成了。

 notificationManager.notify(1, mBuilder.build());

查看效果:


完整代码:

public class MainActivity extends ActionBarActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //定义按钮,启动通知        findViewById(R.id.send_notice).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //定义图标                Bitmap btm = BitmapFactory.decodeResource(getResources(), R.drawable.a1);                //获取状态通知栏管理                NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);                //实例化通知栏构造器                NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(MainActivity.this)                        .setContentTitle("this is setContentTitle text")                        .setContentText("this is setContentText text")                        .setSmallIcon(R.drawable.a1)                        .setTicker("New Message")                        //.setNumber(number) //设置通知集合的数量                        .setNumber(12)                        .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消                        .setLargeIcon(btm);                // 构建一个Intent                Intent intent = new Intent(MainActivity.this, NotificationActivity.class);                // 封装一个PendingIntent                PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);                mBuilder.setContentIntent(pi);                notificationManager.notify(1, mBuilder.build());            }        });    }}

Notification通知其他技巧:

1、方法:.setSound(Uri sound):设置默认或则自定义的铃声,来提醒。

//获取默认铃声.setDefaults(Notification.DEFAULT_SOUND)//获取自定义铃声.setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))//获取Android多媒体库内的铃声.setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5"))
2、方法:setVibrate(long[] pattern):设置震动方式。
.setVibrate(new long[] {0,1000,1000,1000});
实现的效果是振动1秒,停止1秒,再振动1秒。

需要添加权限:

    <uses-permission android:name="android.permission.VIBRATE"/>

3、方法:.setLights(intledARGB ,intledOnMS ,intledOffMS):前置LED灯闪烁

描述:其中ledARGB 表示灯光颜色、 ledOnMS 亮持续时间、ledOffMS 暗的时间,以毫秒为单位。

注意:1)只有在设置了标志符Flags为Notification.FLAG_SHOW_LIGHTS的时候,才支持三色灯提醒。
            2)这边的颜色跟设备有关,不是所有的颜色都可以,要看具体设备。

    .setLights(0xff0000ff, 300, 0)  

4、方法:.setPriority(int pri):优先级
优先级用户MAX重要而紧急的通知,通知用户这个事件是时间上紧迫的或者需要立即处理的。HIGH高优先级用于重要的通信内容,例如短消息或者聊天,这些都是对用户来说比较有兴趣的。DEFAULT默认优先级用于没有特殊优先级分类的通知。LOW低优先级可以通知用户但又不是很紧急的事件。MIN用于后台消息 (例如天气或者位置信息)。最低优先级通知将只在状态栏显示图标,只有用户下拉通知抽屉才能看到内容。


对应属性(作用看上图就可知道):

Notification.PRIORITY_DEFAULT

Notification.PRIORITY_HIGH

Notification.PRIORITY_LOW

Notification.PRIORITY_MAX

Notification.PRIORITY_MIN


5、自定义带按钮通知栏、进度条通知、循环进度通知:

http://bbs.9ria.com/thread-241146-1-1.html

http://blog.csdn.net/vipzjyno1/article/details/25248021/





1 0