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

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


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

Android基础知识(8)—Notification通知_第1张图片

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")
                        .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());

查看效果:

Android基础知识(8)—Notification通知_第2张图片

完整代码:

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秒。

需要添加权限:

    

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 用于后台消息 (例如天气或者位置信息)。最低优先级通知将只在状态栏显示图标,只有用户下拉通知抽屉才能看到内容。

Android基础知识(8)—Notification通知_第3张图片

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

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/





你可能感兴趣的:(android,android,Notification通知,android基础知识)