起因

之前接入腾讯IM,功能都正常使用,后来华为市场要求适配9.0,所以我们就把目标版本升为28

targetSdkVersion : 28

结果发现部分功能出现不可以使用的情况,其中IM互踢功能比较严重,一直报6012错误

im login failed. code: 6012 err_msg: Session for Android send packet timeout

但是把目标版本降为26后又可以继续使用,说明在Android 9.0 后需要进行适配

解决

我就去官网,下载最新的SDK,根据sdk demo,是可以在9.0上实现互踢功能的,后来我照着最新demo,搬到我们的项目里,但是还是报6012 错误,我就奇怪了,为啥会这样,后来我一个个比对,发现,缺少一个判断语句,没错,就是这句话SessionWrapper.isMainProcess(getApplicationContext()),用于判断是否在主线程里,我之前以为在Application里面肯定是在主线程里啊,所以没加这个判断,结果就出现一直无法登陆的错误,仔细一分析也有道理,如果没在主线程里,就是初始化没有成功,那么IM登陆报错就很正常了,所以如果大家也遇到IM登陆报6012的错误,可以试着加入是否在主线程的判断

//判断是否是在主线程---必须加,否则IM无法互踢

if (SessionWrapper.isMainProcess(getApplicationContext())) {

//初始化IM

TUIKitUtils.init(this, AppConstants.SDK_APPID, BaseUIKitConfigs.getDefaultConfigs());

}

SessionWrapper.isMainProcess(getApplicationContext()),这个方法是封装在腾讯IM最新SDK里面

需要引入下面的包才可以使用

compile 'com.tencent.imsdk:imsdk:4+'

如果你不想引入,我也把方法给你们提取出来了,下面就是判断是否在主线程的源码,直接利用下面的方法也可以!

public static boolean isMainProcess(Context context) {

ActivityManager am = (ActivityManager)context.getSystemService("activity");

String mainProcessName = context.getPackageName();

int myPid = Process.myPid();

ListprocessInfos = am.getRunningAppProcesses();

if (processInfos == null) {

QLog.i("TAG", "isMainProcess get getRunningAppProcesses null");

ListprocessList = am.getRunningServices(2147483647);

if (processList == null) {

QLog.i("TAG", "isMainProcess get getRunningServices null");

return false;

} else {

Iterator var9 = processList.iterator();

ActivityManager.RunningServiceInfo rsi;

do {

if (!var9.hasNext()) {

return false;

}

rsi = (ActivityManager.RunningServiceInfo)var9.next();

} while(rsi.pid != myPid || !mainProcessName.equals(rsi.service.getPackageName()));

return true;

}

} else {

Iterator var5 = processInfos.iterator();

ActivityManager.RunningAppProcessInfo info;

do {

if (!var5.hasNext()) {

return false;

}

info = (ActivityManager.RunningAppProcessInfo)var5.next();

} while(info.pid != myPid || !mainProcessName.equals(info.processName));

return true;

}

}

参考文献

腾讯IM接入文档:https://cloud.tencent.com/document/product/269/32678

云通信SDK常见问题:https://cloud.tencent.com/document/product/269/32483#.E7.99.BB.E5.BD.95.E6.8A.A5.E9.94.99-6012-.E6.88.96-tlssdk-exchange-ticket-fail-.EF.BC.9F

公众号

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐