5G Modem Kit众测功能为您提供丰富的Modem参数查询能力,您可以通过提供的众测接口,获取更为全面的网络信息,为网络评估、调优提供基础的数据支撑。
在这个Codelabs中,您将创建一个App,并通过5G Modem Kit完成对Modem参数的查询。
Android Studio的代码库配置在Gradle 插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle 插件版本,选择对应的配置过程。
7.0以下版本 | 7.0版本 | 7.1及以上版本 |
7.0以下版本
a. 打开Android Studio项目级"build.gradle"文件。

b. 添加HUAWEI Maven代码库。
buildscript {
repositories {
google()
jcenter()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
...
}
}
allprojects {
repositories {
google()
jcenter()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
}
7.0版本
a. 打开Android Studio项目级"build.gradle"文件。

b. 添加HUAWEI Maven代码库。
buildscript {
repositories {
google()
jcenter()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
...
}
}
c. 打开项目级"settings.gradle"文件,配置HMS Core SDK的Maven仓地址。
dependencyResolutionManagement {
...
repositories {
google()
jcenter()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
}
7.1及以上版本
a. 打开Android Studio项目级"build.gradle"文件。

b. 打开项目级"settings.gradle"文件,配置HMS Core SDK的Maven仓地址。
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
// 配置HMS Core SDK的Maven仓地址。
maven { url 'https://developer.huawei.com/repo/' }
}
}
dependencyResolutionManagement {
...
repositories {
google()
mavenCentral()
// 配置HMS Core SDK的Maven仓地址。
maven { url 'https://developer.huawei.com/repo/' }
}
}

dependencies {
implementation 'com.huawei.hms:hms5gmodem-crowdtesting:{version}'
}
5G Modem Kit使用了Java 8的新特性(Lambda表达式等),需要在"compileOptions"中添加Java 8的环境编译约束配置。
android{
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
在完成以上的配置后,点击工具栏中的gradle同步图标,完成"build.gradle"文件的同步,将相关依赖下载到本地。
您编译APK前需要配置混淆配置文件,避免混淆HMS Core SDK导致功能异常。
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.huawei.hms5gkit.**{*;}
"R.string.hms*",
"R.string.connect_server_fail_prompt_toast",
"R.string.getting_message_fail_prompt_toast",
"R.string.no_available_network_prompt_toast",
"R.string.third_app_*",
"R.string.upsdk_*",
"R.layout.hms*",
"R.layout.upsdk_*",
"R.drawable.upsdk*",
"R.color.upsdk*",
"R.dimen.upsdk*",
"R.style.upsdk*",
"R.string.agc*"

<!–允许程序访问网络连接–>
<uses-permission android:name="android.permission.INTERNET" />
<!–允许程序获取网络信息状态–>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!–允许程序获取wifi状态–>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!–允许程序通过GPS芯片接收卫星的定位信息–>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />上一小节,您已经成功集成了5G Modem Kit的SDK。
本小节您将尝试编写一个Demo,学会如何使用5G Modem Kit的SDK接口。您只需要按照下文的每一步提示,就可以边学边做,一起构建出这个Demo。
private IQueryModem mQueryModem = QueryModemController.getInstance();// 注册5G Modem Kit回调函数,其中IResProcess为查询指标信息回调接口,IConnectProcess为服务连接信息回调接口
public boolean registerCallback(Context context) {
return mQueryModem.registerCallback(context, mResProcess, mConnectProcess);
}
// IResProcess为查询指标信息回调接口
private IResProcess mResProcess = response -> {
if (response != null && response.getCode() == 0) {
// key为请求参数
String key = response.getQueryParameters();
// data为该请求响应的值
String data = response.getValue();
String content = "";
if (data != null) {
content += key + " request result: " + data;
} else {
content += key + " request result is null";
}
Log.i(TAG, content);
} else {
// 当响应为空,或者错误码不为0时,说明当前请求参数以及请求value无效
if (response != null) {
String content = "error code: " + response.getCode() + ",\t" + response.getMsg();
Log.e(TAG, content);
} else {
Log.e(TAG, "response is null");
}
}
};
// IConnectProcess为服务连接信息回调接口
private IConnectProcess mConnectProcess = response -> {
if (response == null) {
Log.e(TAG, "ConnectProcess callback response data is null");
return;
}
String content;
// 当错误码不为0时,表示存在连接异常,异常信息查看msg
if (response.getCode() != 0) {
content = "connect error code: " + response.getCode() + ", error msg: " + response.getMsg();
Log.e(TAG, content);
} else {
content = "connect code: " + response.getCode() + ", msg: " + response.getMsg();
Log.i(TAG, content);
}
};
// 查看注册状态
// 如果没有注册成功,或者和底层服务连接断开,指标查询会直接返回false
public boolean getConnectStatus() {
return mQueryModem.getAidlConnectStatus();
}
// 参数查询
public boolean queryModem(String requestName) {
return mQueryModem.queryModem(requestName);
}
// 注销回调,断开和底层服务的连接
public void unRegisterCallback() {
mQueryModem.unRegisterCallback();
}
当您完成上述业务代码的补全后,就可以进行编译。完成编译后,生成APK,安装到测试手机上运行。
干得好,您已经完成Codelab并学习到了: