Android程序后台开启服务,显示通知栏

一个Android程序仅仅只能前台 运行是远远不够的,咱们更但愿它在后台运行,既能够接收消息,又不耽误咱们去使用别的软件,这就要求咱们要实现两点:
1,后台运行程序,借助service实现
2,通知栏通知消息,系统的notification
##service实现程序后台运行
实现service程序 后台运行,首先要解决几个问题:
-如何判断程序是否后台运行?
-如何在程序后台运行时去开启服务?
后台进程是指程序对用户不可见的状态,在程序中又该如何去判断呢?其实很简单,我也搜了一些代码,可是都达不到我想要的效果,不如本身动脑。咱们能够注册一个广播去监听activity的某些生命周期,当程序运行到某个生命周期时(stop或者destroy),能够发送广播,而后执行开启服务方法。
这样的话就很灵活了,若是你想要程序不论在任什么时候候均可以接收到通知栏消息,那只须要在onCreate方法中开启一个能够发送notification的广播,诸如此类。
我是在activity调用destroy后开启服务,广播接收器代码以下:ide

/**
     * 监听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方法中注册该广播:ui

IntentFilter filter = new IntentFilter("finish");
        registerReceiver(mFinishReceiver, filter);

由于activity的生命周期,因此在activity的onDestroy方法中去发送广播,通知广播接收器程序已经finish了,能够开启服务,所实现的效果就是当程序结束后,所开启的服务会一直运行在后台进行监听,并经过通知栏发送消息this

@Override
    protected void onDestroy() {
        super.onDestroy();
        //发送广播
        sendBroadcast(new Intent("finish"));
    }

notification通知消息:
接下来的这些代码须要写在服务里
要使用通知栏能够分如下几步:
第一步,获取系统的通知栏管理对象:code

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设置好后就能够发送通知请求 了:get

//发送通知请求
        manager.notify(1,mBuilder.build());

一个完整的发送通知栏的代码以下,固然下拉时的显示风格也能够自定义it

//跳转意图
        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);
相关文章
相关标签/搜索