您的位置:首页 > 数据库

容联云通讯---将系统手机联系人注册用户,同步服务器至本地数据库

2015-11-24 16:06 633 查看
公司是在容联云通讯的代码上,进行二次开发的



系统启动后,启动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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: