Demo下载地址:
一、初始化配置
1. 配置Gradle
- 在使用TozSDK模块的build.gradle文件中,添加如下配置:
implementation 'com.tozmart:tozmartSDK-s2:1.1.7'
- 完整配置如下(只供参考),详见demo:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.tozmart.tozsdkdemos2"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.tozmart:tozmartSDK-s2:1.1.7'
}
2. 配置AndroidManifest
- 权限申请
TozSDK使用到了网络权限,需要在AndroidManifest.xml文件中申请:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 完整配置如下(只供参考),详见demo:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tozmart.tozsdkdemos2">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
3. 初始化SDK
- 新建一个您自己的Activity类(demo中是MainActivity.class),并在该类的onCreate()方法中初始化TozSDK:
注意:在初始化SDK之前要先配置CustomerInfo参数
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 配置必需参数
private CustomerInfo customerInfo = new CustomerInfo();
customerInfo.setCorId("100"); // 分配的公司帐户id,String型
customerInfo.setUserId("10000"); // 用户id,String型
customerInfo.setUserName("test"); // 量体用户的名字,String型
customerInfo.setUserHeight(180.f); // 量体用户的身高,单位是cm,float型
customerInfo.setUserWeight(75.f); // 量体用户的体重,单位是kg,float型
customerInfo.setUserGender("1"); // 量体用户的性别,男性是“1”,女性是“0”,String型
// 初始化SDK
TozSDK.init(this, customerInfo);
...
}
二、使用SDK提供的组件和接口
1. 使用TozCameraView组件(该组件中集成了量体接口)
- 先将TozCameraView添加到你的layout布局文件中:
<com.tozmart.toz_sdk.widge.TozCameraView
android:id="@+id/camera"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:tozLineColor="@android:color/white" />
属性 | 值 | 说明 |
---|---|---|
tozLineColor | color | 更改cameraView边界线的颜色 |
- 确保在activity文件中的onResume、onPause和onDestroy中添加了如下代码
@Override
protected void onResume() {
super.onResume();
// 打开相机
cameraView.start();
}
@Override
protected void onPause() {
super.onPause();
// 关闭相机
cameraView.stop();
}
@Override
protected void onDestroy() {
super.onDestroy();
// 回收内存
cameraView.destroyView();
}
- 拍摄照片并量体
只需调用TozCameraView.process()即可完成拍照和量体功能,监听OnProcessListener并在回调中处理结果:
// 添加拍照和量体监听
cameraView.setOnProcessListener(new OnProcessListener() {
@Override
public void onPhotoTaken(Bitmap bitmap, boolean isFront) {
// bitmap是所拍摄的照片;isFront为true表示返回的是正面照,为false表示返回的是侧面照
}
@Override
public void onProcessSuccess(ImageProcessResponseBean responseBean) {
if (responseBean.getErrNum() > 0) {
// 拍摄的照片不符合要求,需重拍
} else {
// 量体成功
}
}
@Override
public void onProcessFailed(String msg, int code) {
// 量体失败
}
});
返回的ImageProcessResponseBean结构如下:
参数名 | 类型 | 说明 |
---|---|---|
ErrNum | int | 错误信息的个数 |
ErrInfo | List< ImageProcessErrorWarnInfo> | 错误信息 |
其他可自定义功能
设置指示线的颜色:
cameraView.setLineColor(R.color.white);
设置上下指示线的位置:
cameraView.setLinePositionRatio(0.15f, 0.95f);
隐藏或显示指示线:
cameraView.showLineView();
cameraView.hideLineView();
切换指示背景显示:
cameraView.switchTipMask(true, true);
所需的两个参数如下:
参数 | 参数类型 | 说明 |
---|---|---|
showFront | boolean | true表示拍摄正面的背景,为false表示侧面 |
showBody | boolean | true表示显示人体模型,为false表示显示鞋子 |
2. 使用TozSensorTipView
- 先将TozSensorTipView添加你的layout布局文件中:
<com.tozmart.toz_sdk.widge.TozSensorTipView
android:id="@+id/sensorView"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerInParent="true"
app:tozSensorBallColor="@android:color/holo_green_light"
app:tozSensorBallErrorColor="@android:color/holo_red_light"
app:tozSensorCircleLineWidth="10"
app:tozSensorInCircleColor="@android:color/holo_green_light"
app:tozSensorInCircleErrorColor="@android:color/holo_red_light"
app:tozSensorOutCircleColor="@android:color/white"/>
注:使用该View时只可将layout_width和layout_height设置成固定的值,如150dp(不可设置成match_parent或者wrap_content),并且两个值要相等,否则无法正确显示。
属性 | 值 | 说明 |
---|---|---|
tozSensorBallColor | color | 更改当传感器指示正确时中间圆球的颜色 |
tozSensorBallErrorColor | color | 更改当传感器指示错误时中间圆球的颜色 |
tozSensorCircleLineWidth | int | 更改圆环的粗细 |
tozSensorInCircleColor | color | 更改当传感器指示正确时内圆环的颜色 |
tozSensorInCircleErrorColor | color | 更改当传感器指示错误时内圆环的颜色 |
tozSensorOutCircleColor | color | 更改外圆环的颜色 |
- 确保在activity文件中的onResume和onPause中添加了如下代码
@Override
protected void onResume() {
super.onResume();
// 注册传感器监听
sensorView.registerSensor();
}
@Override
protected void onPause() {
super.onPause();
// 取消传感器监听
sensorView.unregisterSensor();
}
- 使用TozSensorTipView反馈手机姿势是否正确
// 监听传感器,判断手机的姿势是否符合拍照要求
sensorView.setOnSensorListener(new OnSensorListener() {
@Override
public void onSensorOk() {
// 手机姿势正确,可以进行拍照
}
@Override
public void onSensorError() {
// 手机姿势错误,提示用户进行调整
}
});
3. 直接调用量体接口
- 如果想通过直接提供照片(从相册里选择照片)就获取量体结果,可以调用该接口
ImageProcess.process(frontImage, sideImage,
new LoadDataCallBack() {
@Override
public void onResponseSuccess(ImageProcessResponseBean response) {
if (response.getErrNum() > 0) {
// 拍摄的照片不符合要求,需重拍
} else {
// 量体成功
}
}
@Override
public void onResponseFailed(String msg, int code) {
// 量体失败
}
@Override
public void onNullResponse() {
// 暂时忽略
}
}, true);
该接口共需4个参数:
参数 | 参数类型 | 作用 |
---|---|---|
frontImage | Bitmap | 后台处理所需的正面照片 |
sideImage | Bitmap | 后台处理所需的侧面照片 |
callback | LoadDataCallBack | 接口回调 |
isShowDialog | boolean | 是否显示加载对话框 |