写给初学者28_android_Notification
来源:互联网 发布:整治网络传销可丽金 编辑:程序博客网 时间:2024/06/05 20:49
安卓28_通知栏技术
这个就是你经常去划掉的那个小方框,好的通知栏,符合规矩的通知栏是让人很舒服的,除了那些流氓一点的。想要开发出通知栏,也是十分简单的。基本掌握两个类
- NotificationManager 管理 负责发送,关闭等
- Notification 被发送的通知栏对象
从这两个类你基本能知晓,使用Manager来管理Notification,安卓这种Manager遍地都是,比如在这之前的LocalBroadcastManager,LayoutManager等。
基本使用
public class MainActivity extends AppCompatActivity { NotificationManager manager; Notification notification; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); } private void sendNotification() { // 产生Notification对象 notification = new NotificationCompat.Builder(this) .setContentTitle("你有一条新消息") .setContentText("I am a Notification") .setWhen(System.currentTimeMillis()) .setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)). build(); // 唤醒一个通知,第一个参数是notification的id manager.notify(1,notification); } public void onClick(View view){ sendNotification(); }}
我在这里有一个按钮,使用onClick属性进行监听事件的确定。这里初学者是比较难理解这种写法的,如果你已经对弹出对话框的写法有一定了解,那么你就不会那么难理解了,JAVA底子好的人一眼就能看出这是一种构建型设计模式的体现。
效果
关于这些参数对应着结果,一目了然。
通知栏响应点击
这里我们只是发了一条基本消息,并且这条消息点击过后是没有任何效果的,一般的处理操作,当点击以后会直接启动用户界面交互,或者其他操作。
如果我们要通过点击打开一个Activity,或者Service,又或则发送一条广播,那么我们应该只管想象到Intent,因为这些的启动需要Intent。不过这里除了Intent,还需要新的一个类PendingIntent。简单理解就是一种等待执行的Intent,当用户触发才会执行的。
关于PendingIntent的实例获取,根据你要启动的是活动还是服务还是广播来决定。也就是
- getActivity
- getService
- getBroadcast
然后需要传入参数
- context 上下文
- requestCode 请求码(一般不用 传入0)
- Intent 意图
- flags PendingIntent的行为方式
关于 flag 有四个标示
- FLAG_ONE_SHOT 只能使用一次
- FLAG_NO_CREATE
- FLAG_CANCEL_CURRENT如果描述的PendingIntent已经存在,则在产生新的Intent之前会先取消掉当前的
- FLAG_UPDATE_CURRENT最经常使用的是FLAG_UPDATE_CURRENT,描述的Intent有 更新的时候需要用到这个flag去更新你的描述
根据实际情况选择就好了。
实现点击通知栏进行跳转。
在这里我们只需要对我们的Notification对象添加一条ContentIntent就好,而这个要求的参数就PendingIntent引用。
这次先看结果
code:
public class MainActivity extends AppCompatActivity {NotificationManager manager;Notification notification;PendingIntent pendingIntent;Intent intent;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); intent = new Intent(this, NextActivity.class); pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);}private void sendNotification() { notification = new NotificationCompat.Builder(this) .setContentTitle("你有一条新消息") .setContentText("I am a Notification") .setWhen(System.currentTimeMillis()) .setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) .setContentIntent(pendingIntent). build(); manager.notify(1, notification);}public void onClick(View view) { sendNotification();}}
不过我们的消息并没有因为点击而消失,这个时候只需要简单的多调用一个方法,setAutoCancel(true)那么点击以后Notification就会自己消失了。
特别注意,这里需要和Activity的启动模式结合使用才是最佳,不然你的Notification点击一次返回栈里面就会有一个全新的Activity,结合实际情况选择合适的启动模式就好了。
通知的声音、振动
一般我们的通知都会带有声音或者振动,从而来达到提醒的作用。
- setSound 要求传递的是资源人间的URI
- setVubrate 传递是振动时间
- setLights 要求传递颜色和灯亮起和暗下时常
时间都是以毫秒作为单位
code
振动权限
/*<uses-permission android:name="android.permission.VIBRATE"/>*/private void sendNotification() { notification = new NotificationCompat.Builder(this) .setContentTitle("你有一条新消息") .setContentText("I am a Notification") .setWhen(System.currentTimeMillis()) .setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) .setContentIntent(pendingIntent) // 这里是系统中铃声中的一个 如果是自己的文件 注意路径就好了 .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Nib.ogg"))) // 首先振动需要权限 第一个位置代表静止时长 第二个代表振动时长 可以重复多次组合 .setVibrate(new long[]{0,2000}) // 点击后消失 .setAutoCancel(true) .build(); manager.notify(1, notification);}
让消息栏出现在手机屏幕上方
只需要将权限设置为最大
.setPriority(NotificationCompat.PRIORITY_MAX)
让消息栏实现更多的内容
- 显示更多的文字
- 显示更大的图片
都是通过setStyle来完成
//.setStyle(new NotificationCompat.BigTextStyle().bigText("放入长消息")).setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.timg)))
Notification的使用完全调用系统当中的方法就能满足一本的基本要求,当然我们也可以自定义消息栏,比如最常见的音乐播放器的消息栏、关于这一个技术,比四大组件都简单,没有必要死记硬背,什么时候要用,多多查阅就好
0 0
- 写给初学者28_android_Notification
- 写给初学者
- 写给初学者的FAQ
- 写给初学者的建议
- 关于学习 -- 写给初学者
- 写给java初学者
- 写给Linux内核初学者
- 写给JAVA初学者
- 写给C语言初学者
- 写给Linux初学者的话
- 写给java初学者
- 写给嵌入式初学者
- 写给初学者:自定义事件
- 写给java初学者
- 写给Android开发初学者
- 写给c++初学者 之一
- 写给iOS开发初学者
- 写给Java初学者
- TinyXml入门简易教程.
- Numpy之repeat、tile用法总结
- 重要的反常积分证明
- 原生如何检测变量是否是一个数组的几种方法
- ubuntu下安装FFMPEG步骤以及需要的各种压缩包
- 写给初学者28_android_Notification
- 游戏制作二
- hdu5241——Friends(找规律+大数幂)
- 二叉树25:序列化二叉树
- Java并发开篇
- 2015第六届山东省赛训练总结2017/4/29
- Eb/N0 and SNR
- 【java】OOM
- LVS:三种负载均衡方式比较