容联云通讯---将系统手机联系人注册用户,同步服务器至本地数据库
2015-11-24 16:06
633 查看
公司是在容联云通讯的代码上,进行二次开发的
系统启动后,启动startHSCoreService服务操作
接下来看HSCoreService服务代码,在onStartCommand接收
在看上面代码中的ServiceHandler
接下来看onUploadUserWeixinId方法
看上面代码中的getResourceForUploaWeixinIds方法
[b]看上面代码中的sendToTarget(WHAT_UPLOAD_MOBILES, doc);方法[/b]
看数据库方法[/b]
系统启动后,启动startHSCoreService服务操作
public static void startHSCoreService(Context context) { if (Global.clientInfo() != null && Global.IsActive) { Intent service = new Intent(context, HSCoreService.class); service.addFlags(FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); /** * add by wyf service.setAction(HSCoreService.ACTION_RESEND_MOBILES); service.putExtra(Global.SERVICE_RESEND_TYPE, HSCoreService.TYPE_ALL); */ service.setAction(HSCoreService.ACTION_RESEND_WEIXINS); service.putExtra(Global.SERVICE_RESEND_TYPE, HSCoreService.TYPE_ALL); context.startService(service); } }
public static final String ACTION_RESEND_WEIXINS = "resend_weixins";
public static final String SERVICE_RESEND_TYPE = "service_resend_type";
public static final int TYPE_ALL = 0;
接下来看HSCoreService服务代码,在onStartCommand接收
public int onStartCommand(Intent intent, int flags, int startId) { if (intent == null) { return super.onStartCommand(intent, flags, startId); } Log.e("onStartCommand", "begin"); // For each start request, send a message to start a job and deliver the // start ID so we know which request we're stopping when we finish the job Message msg = mServiceHandler.obtainMessage(); msg.obj = intent; msg.arg1 = startId; mServiceHandler.sendMessage(msg); if (this.lastStartId != -1) { stopSelfResult(this.lastStartId); } this.lastStartId = startId; // If we get killed, after returning from here, restart return START_STICKY; }
在看上面代码中的ServiceHandler
else if (action.equals(ACTION_RESEND_WEIXINS)) { Log.e("TAG", "[HSCService] resend weixins."); int type = intent.getIntExtra(Global.SERVICE_RESEND_TYPE, 0); String [] numbers = intent.getStringArrayExtra(Global.SERVICE_RESEND_WEIXINS); //上传微信ids到服务器 onUploadUserWeixinId(type, numbers); }
public static final String SERVICE_RESEND_WEIXINS = "service_resend_weixins";上面代码中的numbers是一个空的数组
接下来看onUploadUserWeixinId方法
private synchronized void onUploadUserWeixinId(int type, String [] weixin_array) { if (!ProtocolUtil.isConnected()) { LogUtil.w("[UploadWeiXinId] network disconnect."); return; } //获取wx_info表中当前绑定登录的微信账号所有好友的id @SuppressWarnings("deprecation") String[] weixinIds = VChatSipInfoStorage.getInstance().queryAllVChatIdFromWxInfo(); //获取vchat_sip_config表中所有vchatId信息 ArrayList<String> weixinIdsDB = (ArrayList<String>) VChatSipInfoStorage.getInstance().queryAllVChatIdsFromVChatSipConfig(); if(weixinIdsDB == null) { weixinIdsDB = new ArrayList<String>(); Log.e("TAG", "weixinIdsDB=================null"); } //循环遍历weixinIds,如果vchat_sip_config表中不包含,就添加进来 if(weixinIds != null) { for(String weixinId : weixinIds) { if(weixinIdsDB.contains(weixinId)) { continue; } weixinIdsDB.add(weixinId); } } String[] weixinIdsArray = weixinIdsDB.toArray(new String[]{}); if (weixinIdsArray == null || weixinIdsArray.length <= 0) { Log.e("TAG", "weixinIdsArray ====================== null"); return; }else { Log.e("TAG", "weixinIdsArray !!!!!!!!!!!!!!====================== null"); Log.e("TAG", ""+weixinIdsArray.length); } if(!isClientAuth()) { return; } String userid = clientAuth == null ? null : clientAuth.getUserId(); if (userid == null) { LogUtil.w("[UploadWeiXinId] user is not register."); return; } //res json数据封装 Resource res = getResourceForUploaWeixinIds(userid, weixinIdsArray, type); Document doc = null; try { doc = handleNetwork(res); if (doc != null) { res.notifyHandlerFinish(doc); } } catch (Exception e) { e.printStackTrace(); } finally { if (res != null) { res.released(); } TextUtil.releaseStringArray(weixin_array); //发消息--处理头像问题的 sendToTarget(WHAT_UPLOAD_MOBILES, doc); System.gc(); } }
看上面代码中的getResourceForUploaWeixinIds方法
/** * add by wyf weixinid */ @SuppressWarnings("deprecation") private Resource getResourceForUploaWeixinIds(String userid, String[] wixinids, int type){ Resource res = new Resource(); res.setRequestKey(RequestKey.KEY_USERVOIP_NET); res.setUrl(Global.getRequestUrl(RequestUri.URI_GET_VOIP_USER_INFO, null)); //win_info表获取自己的微信id String myWeixinId = SQLiteManager.getInstance().queryWeixinIdOfMyself(); LogUtils.i(TAG, "------->queryWeixinIdByIsLoginIsOne:"+myWeixinId); //注册成功后,会在TABLES_NAME_VCHAT_SIP_CONFIG表中查询godinId String godinIdByVChatId = SQLiteManager.getInstance().queryGodinId(); LogUtils.i(TAG, "------->godinIdByVChatId:"+godinIdByVChatId); String requestJSON = ProtocolUtil.buildJSONPacketBody(new String[] { "useragent", "network", "reqtime" ,"wechat_id","godin_id"}, new Object[] { Global.getUser_Agent(), ProtocolUtil.getNetworkName() + "", DateUtil.getDefaultFormat() ,myWeixinId,godinIdByVChatId}, new String[]{"wechat_id"}, new Object[] {wixinids}); //setRequestProperties(Request_Body, requestJSON); hashmap res.setRequestBody(requestJSON); res.setParser(ParserManager.getInstance().getAdapterParser(res.getResourceType())); return res; }
[b]看上面代码中的sendToTarget(WHAT_UPLOAD_MOBILES, doc);方法[/b]
else if (msg.what == WHAT_UPLOAD_MOBILES) { ContactState doc = (ContactState) msg.obj; if (doc == null) { return; } VChatSipInfoStorage.getInstance().insertVChatContacts(doc.getEntryList()); }[b]
看数据库方法[/b]
/** * 插入微信好友 * * @param List * <ContactState.Entry> entrys */ public void insertVChatContacts(List<ContactState.Entry> entrys) { LogUtils.d(TAG, "------------------>methed:insertVChatContacts"); if (entrys == null) { return; } for (ContactState.Entry entry : entrys) { insertVChatConatct(entry); } } /** * 插入微信好友信息 * * @param entry */ public synchronized void insertVChatConatct(ContactState.Entry entry) { LogUtils.d(TAG, "------------------>methed:insertVChatConatct"); ContentValues values = null; try { values = new ContentValues(); if (!TextUtils.isEmpty(entry.getVchatId())) { values.put(SipConfigColum.VCHAT_ID, entry.getVchatId()); } if (!TextUtil.isEmpty(entry.getSipAccount())) { values.put(SipConfigColum.VOIP_ACCOUNT, entry.getSipAccount()); } if (!TextUtil.isEmpty(entry.getGodinId())) { values.put(SipConfigColum.GODIN_ID, entry.getGodinId()); } String loginVChatId = queryBindLoginVChatId(); values.put(SipConfigColum.BELONGTO_VCHAT_ID, loginVChatId); // 当前绑定登录的账号不必再次插入 if (loginVChatId.equals(entry.getVchatId())) { return; } if (queryVChatContactIsExistByVChatId(entry.getVchatId(), loginVChatId)) { sqliteDB().update( DatabaseHelper.TABLES_NAME_VCHAT_SIP_CONFIG, values, createSelections(SipConfigColum.VCHAT_ID, SipConfigColum.BELONGTO_VCHAT_ID), new String[] { entry.getVchatId(), loginVChatId }); } else { sqliteDB().insert(DatabaseHelper.TABLES_NAME_VCHAT_SIP_CONFIG, null, values); } } catch (Exception e) { LogUtils.e(TAG, "-------->insert vchat caontacts false."); e.printStackTrace(); } finally { if (values != null) { values.clear(); values = null; } } }
相关文章推荐
- Oracle rownum
- oracle增加表空间数据文件大小
- Oracle删除clob类型字段(回收站)
- Windows下MySQL 5.6.27.0.安装及配置
- linux oracle 乱码
- Oracle改变会话日期格式
- 报错:1130-host ... is not allowed to connect to this MySql server
- Mongodb的Replica Set 副本集集群搭建
- mysql启动问题access denied for user 'root'@'localhost'(using password:YES)
- SQL注入原理
- Oracle 12C PSU
- OracleOraDb11g_home1TNSListener服务启动后停止
- oracle is not in the sudoers file.This incident will be reported
- html select下拉菜单 从数据库中读取 ajax
- ORA-01126: 数据库必须已装载到此实例并且不在任何实例中打开
- 分析Redis架构设计
- Linux内核参数(如kernel.shmmax)及Oracle相关参数调整(如SGA_MAX_SIZE)
- Oracle性能调优
- Oracle 分区表
- Oracle在Linux平台安装时涉及的/etc/security/limits.conf