Android 开机启动服务

 在xml中注册

 <!-- 开机广播 -->
        <receiver android:name=".receiver.BootBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </receiver>

启动 app核心服务

package com.boai.base.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import com.boai.base.service.CoreService;


public class BootBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        // 启动App核心Service
        Intent startCoreServiceIntent = new Intent(context, CoreService.class);
        context.startService(startCoreServiceIntent);
    }

}

  服务类

public class CoreService extends Service

  在服务类中 注册广播

   @Override
    public void onCreate() {
        super.onCreate();

        // 注册广播
        regBroadcastReceiver();
    }

  生成需要的广播

private void regBroadcastReceiver() {
        IntentFilter mPushMsgBrFileter = new IntentFilter();
        mPushMsgBrFileter.addAction(Constants.BR_ACTION_UMENG_PUSH_MSG);
        mPushMsgBrFileter.addAction(Constants.BR_ACTION_USER_LOGIN);
        mPushMsgBrFileter.addAction(Constants.BR_ACTION_USER_LOGOUT);
        registerReceiver(mBroadcastReceiver, mPushMsgBrFileter);
    }

  广播接收处理

   //创建一个可根据需要创建新线程的线程池

mThreadPool = Executors.newCachedThreadPool();
    // 广播接收
    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (Constants.BR_ACTION_UMENG_PUSH_MSG.equals(action)) {
                // 推送消息
                if (AppCookie.getUserId() == -1) {
                    return ;
                }

                final Serializable tempObj = intent.getSerializableExtra(Constants.OBJECT);
                if (null == tempObj) {
                    return ;
                }

                mThreadPool.submit(new Runnable() {
                    @Override
                    public void run() {
                        handlerPushMsg((PushMsgBean)tempObj);
                    }
                });
            } else if (Constants.BR_ACTION_USER_LOGIN.equals(action)) {
                // 登录
                // 更新用户位置
                mHandler.removeMessages(HANDLER_WHAT_UPDATE_USER_LOCALTION);
                mHandler.sendEmptyMessage(HANDLER_WHAT_UPDATE_USER_LOCALTION);
            } else if (Constants.BR_ACTION_USER_LOGOUT.equals(action)) {
                // 登出,移除相应广播
                mHandler.removeMessages(HANDLER_WHAT_UPDATE_USER_LOCALTION);
            }
        }
    };

  

/**
* 处理推送消息
* @param retPushMsg 推送消息对象
*/
private void handlerPushMsg(PushMsgBean retPushMsg) {
    //...
    
     // 广播给需要通知刷新的界面
        msg.setReadStatus(0);        Intent intent = new Intent(Constants.BR_ACTION_NEW_MSG);
        intent.putExtra(Constants.OBJECT, msg);
        sendBroadcast(intent);

      // 是否免打扰
        boolean isNofityNoDisturb = AppCookie.getBoolean(Constants.STATUS_BUSINESS_PUSH, false);
        if (!isNofityNoDisturb) {
            // 发送显示通知栏
            mHandler.obtainMessage(HANDLER_WHAT_NEW_MSG_PUSH, msgDbID, 0, retPushMsg).sendToTarget();
        }
}   

  //handler

 // Handler处理
    private static class MyHandler extends Handler {
        private WeakReference<CoreService> wrf;

        public MyHandler(CoreService coreService) {
            wrf = new WeakReference<>(coreService);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            final CoreService curCoreService = wrf.get();

            if (null == curCoreService) {
                return ;
            }

            switch (msg.what) {
                      case HANDLER_WHAT_NEW_MSG_PUSH: {
                    final PushMsgBean curPushMsg = (PushMsgBean)msg.obj;
                    final int msgDbId = msg.arg1;

                    int msgType = curPushMsg.getMsgtype();
                    if (msgType == MsgTypeEnum.FOLLOW.getTypeValue()) {
                        try {
                            String url = AppUtil.getUnifyImageUrl(ImageType.USER_ICON, Long.parseLong(curPushMsg.getSid()));
                            ImageLoader.getInstance().loadImage(url, new ImageLoadingListener() {
                                @Override
                                public void onLoadingStarted(String s, View view) {
                                }

                                @Override
                                public void onLoadingFailed(String s, View view, FailReason failReason) {
                                    curCoreService.mNotificationUtil.showPushMsgNotify(curPushMsg, msgDbId, null);
                                }

                                @Override
                                public void onLoadingComplete(String s, View view, Bitmap bitmap) {
                                    curCoreService.mNotificationUtil.showPushMsgNotify(curPushMsg, msgDbId, bitmap);
                                }

                                @Override
                                public void onLoadingCancelled(String s, View view) {
                                    curCoreService.mNotificationUtil.showPushMsgNotify(curPushMsg, msgDbId, null);
                                }
                            });
                        } catch (Exception e) {
                            e.printStackTrace();
                            curCoreService.mNotificationUtil.showPushMsgNotify(curPushMsg, msgDbId, null);
                        }
                    } else {
                        curCoreService.mNotificationUtil.showPushMsgNotify(curPushMsg, msgDbId, null);
                    }
                    break;
                }
            }
        }
    }

  服务关闭

    @Override
    public void onDestroy() {
        super.onDestroy();

        unregisterReceiver(mBroadcastReceiver);
    }

  




 

posted @ 2015-11-25 14:30  说好范特西  阅读(430)  评论(0编辑  收藏  举报