Android程序后台开启服务,显示通知栏
2016-01-13 15:45
429 查看
一个Android程序仅仅只能前台 运行是远远不够的,我们更希望它在后台运行,既可以接收消息,又不耽误我们去使用别的软件,这就要求我们要实现两点:
1,后台运行程序,借助service实现
2,通知栏通知消息,系统的notification
如何判断程序是否后台运行?如何在程序后台运行时去开启服务?
后台进程是指程序对用户不可见的状态,在程序中又该如何去判断呢?其实很简单,我也搜了一些代码,但是都达不到我想要的效果,不如自己动脑。我们可以注册一个广播去监听activity的某些生命周期,当程序运行到某个生命周期时(stop或者destroy),可以发送广播,然后执行开启服务方法。
这样的话就很灵活了,如果你想要程序不论在任何时候都可以接收到通知栏消息,那只需要在onCreate方法中开启一个可以发送notification的广播,诸如此类。
我是在activity调用destroy后开启服务,广播接收器代码如下:
要使用通知栏可以分以下几步:
第一步,获取系统的通知栏管理对象:
builder对象提供了很多方法,在这里介绍一些常用方法
argb:LED灯的颜色
onMs:LED灯亮的时间,以毫秒为单位
offMs:LED灯灭的时间,以毫秒为单位
第四步,在builder设置好后就可以发送通知请求 了:
一个完整的发送通知栏的代码如下,当然下拉时的显示风格也可以自定义
1,后台运行程序,借助service实现
2,通知栏通知消息,系统的notification
service实现程序后台运行
实现service程序 后台运行,首先要解决几个问题:如何判断程序是否后台运行?如何在程序后台运行时去开启服务?
后台进程是指程序对用户不可见的状态,在程序中又该如何去判断呢?其实很简单,我也搜了一些代码,但是都达不到我想要的效果,不如自己动脑。我们可以注册一个广播去监听activity的某些生命周期,当程序运行到某个生命周期时(stop或者destroy),可以发送广播,然后执行开启服务方法。
这样的话就很灵活了,如果你想要程序不论在任何时候都可以接收到通知栏消息,那只需要在onCreate方法中开启一个可以发送notification的广播,诸如此类。
我是在activity调用destroy后开启服务,广播接收器代码如下:
/** * 监听activity的结束 */ private BroadcastReceiver mFinishReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //开启一个发送notification的service Intent intentService = new Intent(MainActivity.this,NotifyService.class); startService(intentService); //一定要注销广播 unregisterReceiver(mFinishReceiver); } };在程序的onCreate方法中注册该广播:
IntentFilter filter = new IntentFilter("finish"); registerReceiver(mFinishReceiver, filter);因为activity的生命周期,所以在activity的onDestroy方法中去发送广播,通知广播接收器程序已经finish了,可以开启服务,所实现的效果就是当程序结束后,所开启的服务会一直运行在后台进行监听,并通过通知栏发送消息
@Override protected void onDestroy() { super.onDestroy(); //发送广播 sendBroadcast(new Intent("finish")); }
notification通知消息:
接下来的这些代码需要写在服务里要使用通知栏可以分以下几步:
第一步,获取系统的通知栏管理对象:
private NotificationManager manager;
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);第二步,获取通知栏Builder对象(是v4 包下的)
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext());第三步,获取到builder对象后, 就可以对通知栏进行一个界面和通知形式的一些设置了
builder对象提供了很多方法,在这里介绍一些常用方法
//设置手机上LED灯的闪烁频率及灯的颜色, setLights(@ColorInt int argb, int onMs, int offMs)该方法的参数分析:
argb:LED灯的颜色
onMs:LED灯亮的时间,以毫秒为单位
offMs:LED灯灭的时间,以毫秒为单位
//定义通知栏所显示的内容 setTicker(CharSequence tickerText)
//设置通知到来时的一些选项 mBuilder.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND);该方法有四个取值,DEFAULT_SOUND(默认的提示音),DEFAULT_VIBRATE(震动),DEFAULT_LIGHTS(灯闪烁),DEFAULT_ALL(拥有全部设置选项)
第四步,在builder设置好后就可以发送通知请求 了:
//发送通知请求 manager.notify(1,mBuilder.build());
一个完整的发送通知栏的代码如下,当然下拉时的显示风格也可以自定义
//跳转意图 Intent intent = new Intent(NotifyService.this,MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),0,intent,0); NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()); //通知栏显示内容 builder.setTicker("notify_activity"); //通知消息下拉是显示的文本内容 builder.setContentText("content"); //通知栏消息下拉时显示的标题 builder.setContentTitle("title"); //接收到通知时,按手机的默认设置进行处理,声音,震动,灯 builder.setDefaults(Notification.DEFAULT_ALL); //通知栏显示图标 builder.setSmallIcon(R.drawable.notification_template_icon_bg); builder.setContentIntent(pendingIntent); notification = builder.build(); //点击跳转后消失 notification.flags |= Notification.FLAG_AUTO_CANCEL; manager.notify(1,notification);
相关文章推荐
- AndroidStudio项目从低版本导入到高版本出现的问题
- android : 优质的博文
- android改变ActionBar的高度
- 通过Canvas的叠加实现Android中环形View的颜色填充动画效果
- Android viewpager中动态添加view并实现伪无限循环的方法
- Android系统中自定义按键的短按、双击、长按事件
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- android NDK添加iconv支持,支持GBK UTF-8编码转换
- Android 一步一步教你使用ViewDragHelper
- Android 拍照裁剪图片不清晰解决办法
- 解决 Android Studio 的 ADB not responding 错误
- Android笔记——Android中数据的存储方式(二)
- Android 5.0学习之AnimatedVectorDrawable
- android studio的问题整理
- android 背景渐变
- android .9图片制作与注意
- Android L之 VectorDrawable
- Android中取消标题栏遇到的问题
- Android TextView控件某个字符串特殊效果
- android 动态显示和隐藏状态栏