开发准备

QDSignManger
QDAccManager
QDCloudManger
QDWorkManager
QDSelfManager
QDFileManger
QDGroupManager
QDFriendManager
QDClient
  • QDClient: SDK 的入口,主要完成初始化、消息创建、发送等功能。也是获取其他模块的入口。
  • QDFriendManager: 好友相关的接口
  • QDGroupManager: 群组相关的接口
  • QDFileManger: 文件相关的接口
  • QDSelfManger: 登陆者相关的接口
  • QDWorkManager: 应用相关的接口
  • QDCloudManger: 云盘相关的接口
  • QDAccManager: 公众号相关的接口
  • QDSignManager: 外勤签到相关的接口

添加jar文件

将IM的jar包复制到工程的libs目录下,如果有老版本jar包在其中,请替换。如图显示:

配置AndroidManifest文件

集成IM需要在application标签下注册服务QDIMService,用于和服务端的交互和本地数据处理

 <service android:name="com.longchat.base.service.QDIMService" />

配置权限

 <!--用于访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--允许程序设置内置sd卡的写权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <!--允许程序获取网络状态-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--允许程序访问WiFi网络信息-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--允许程序读写手机状态和身份-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!--用于申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <!--用于申请获取蓝牙信息进行室内定位-->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <!--相机权限-->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission
        android:name="android.permission.WRITE_SETTINGS"
        tools:ignore="ProtectedPermissions" />

app下面的build.gradle配置

  implementation "com.squareup.okhttp3:okhttp:3.12.1"
   implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
  implementation 'com.squareup.okio:okio:2.2.0'
    implementation "com.squareup.retrofit2:retrofit:2.5.0"
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

混淆配置

-keep class com.longchat.base.**{*;}
########okhttp#########
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

-dontwarn okio.**

# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain service method parameters.
-keepclassmembernames,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}
# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
########okhttp#########

如果需要集成手机厂商的消息离线推送功能,请自行按照各个厂商的离线推送说明文档进行配置

注意事项

由于Android P(包含更高版本)系统禁止使用所有未加密的连接,所以在使用检索功能(poi检索,路线规划,行政区域检索,地理编码,逆地理编码)会返回error.SEARCH_SERVER_INTERNAL_ERROR。并有如下异常信息:

 W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted

针对该问题有以下三种解决方案如下:

  1. targetSdkVersion 降到27以下;
  2. 按如下方式更改网络安全配置
    2.1)在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
      <base-config cleartextTrafficPermitted="true" />
    </network-security-config>
    
    2.2)在AndroidManifest.xml文件下的application标签增加以下属性:
    <application
    ...
    android:networkSecurityConfig="@xml/network_security_config"
    ...
    />
    

Android 10 改变了文件的存储方式
可以在Androidmainfest 里面的application添加
android:requestLegacyExternalStorage=”true”