Przeglądaj źródła

Update documentation

master
陈福行 5 lat temu
rodzic
commit
91e6c478ce
2 zmienionych plików z 202 dodań i 96 usunięć
  1. 102
    50
      README.md
  2. 100
    46
      README_CN.md

+ 102
- 50
README.md Wyświetl plik

@@ -2,15 +2,29 @@

[![](https://jitpack.io/v/elinkthings/BodyFatScaleSDKRepositoryAndroid.svg)](https://jitpack.io/#elinkthings/BodyFatScaleSDKRepositoryAndroid)

[aar package download link](https://github.com/inet2018/BodyFatScaleSDKRepositoryAndroid/releases)
[aar package download link](https://github.com/elinkthings/BodyFatScaleSDKRepositoryAndroid/releases)

[key registered address](http://sdk.aicare.net.cn)

[中文文档](README_CN.md)

This document is a guide for Android developers to integrate good figure-SDK-Android in Android 4.4 and above systems, mainly for some key usage examples

## 1 Import SDK
## Overview
- What is elink body fat scale SDK?

> The elink body fat scale SDK is a Bluetooth development tool provided to elink partners. The SDK implements and encapsulates the elink Bluetooth protocol and is responsible for the communication between the mobile phone App and the Bluetooth body fat scale device. Bluetooth body fat scale application.

- Scope of application

> Partners who need to personalize their Android Bluetooth body fat scale APP.



## Conditions of Use
1. Minimum version android4.4 (API 19)
2. The Bluetooth version used by the device requires 4.0 and above

## Import SDK


```
@@ -43,7 +57,7 @@ You can also use aar package dependency,Please download it into the project's li

```

## 2 permission settings
## permission settings

```
<!-In most cases, you need to ensure that the device supports BLE .-->
@@ -64,7 +78,12 @@ You can also use aar package dependency,Please download it into the project's li

> 6.0 and above systems need to locate permissions and need to obtain permissions manually

## 3 start integration
## start integration
> First configure the key and secret for the SDK, [application address](http://sdk.aicare.net.cn)
```
  // Called in the application of the main project
  AiFitSDK.getInstance (). Init (this, key, secret);
```

> Add below AndroidManifest.xml application tag
```
@@ -78,12 +97,6 @@ You can also use aar package dependency,Please download it into the project's li
```


> initialization [key registered address](http://sdk.aicare.net.cn)
```
  // Call in application
  AiFitSDK.getInstance ().init(this, key, secret);
```

> You can directly make your own `Activity` class extend` BleProfileServiceReadyActivity`

```
@@ -108,7 +121,7 @@ public class MyActivity extends BleProfileServiceReadyActivity
    
```

## 4 scan the device, stop scanning the device, check the scan status
## scan the device, stop scanning the device, check the scan status
The APIs related to scanning are as follows. For details, please refer to the BleProfileServiceReadyActivity class. For details, refer to the sample project.

```
@@ -121,7 +134,7 @@ The APIs related to scanning are as follows. For details, please refer to the Bl
               
      
    }
// Call the stopScan method to stop scanning. This convenience is not recommended for customers to call
// Call the stopScan method to stop scanning
 stopScan ();
// Call the isScanning method to see if it is scanning true: scanning; false: scanning stopped
 isScanning ();
@@ -153,7 +166,7 @@ The APIs related to scanning are as follows. For details, please refer to the Bl
```
      

## 5 connect the device, disconnect the device
## connect the device, disconnect the device

The APIs related to the connection are as follows, please refer to the BleProfileServiceReadyActivity class for details.

@@ -172,9 +185,9 @@ startConnect (String address)
 binder.disconnect ()
```

Use the `startConnect` method to connect to the body fat scale, use the` onStateChanged` method to monitor the status of the connection, and use the `onError` method to monitor for exceptions during the connection process, in order to facilitate additional processing and troubleshooting. Use the `isDeviceConnected` method to determine whether a connection has been established.
> Use the `startConnect` method to connect to the body fat scale, use the` onStateChanged` method to monitor the status of the connection, and use the `onError` method to monitor for exceptions during the connection process, in order to facilitate additional processing and troubleshooting. Use the `isDeviceConnected` method to determine whether a connection has been established.

## 6 Successful connection, accept the data returned by the scale
## Successful connection, accept the data returned by the scale
The following methods or interfaces are automatically obtained directly after inheriting the BleProfileServiceReadyActivity class

```
@@ -222,26 +235,27 @@ The following methods or interfaces are automatically obtained directly after in
    

```
Note: Some of these interfaces or methods require APP to issue commands to body fat to return data.
> Note: Some of these interfaces or methods require APP to issue commands to body fat to return data.

## 7 Call the algorithm to calculate the data in the SDK
AicareBleConfig contains algorithms related to body fat data that can be called
## Call the algorithm to calculate the data in the SDK
- If the device returns impedance, and there is no body fat data, you can obtain the BodyFatData object by inheriting the onGetFatData method in BleProfileServiceReadyActivity, and call the AicareBleConfig.getBodyFatData method to calculate the cn.net.aicare.algorithmutil.BodyFatData object
Instructions:
```
AicareBleConfig.getBodyFatData(AlgorithmUtil.AlgorithmType.TYPE_AIC
ARE, bodyFatData.getSex(), bodyFatData.getAge(),
Double.valueOf(ParseData.getKgWeight(bodyFatData.getWeight(),
bodyFatData.getDecimalInfo())), bodyFatData .getHeight(),
bodyFatData.getAdc());
```
- If you need to get 6 additional body indicators such as body fat removal and weight control, please call AicareBleConfig.getMoreFatData to get MoreFatData object
Instructions:
```
If the device returns impedance, there is no body fat data that can be calculated by calling the getBodyFatData method, and the algorithm can be obtained by calling the algorithm on the data in the BodyFatData object.
as follows:
AicareBleConfig.getBodyFatData (AlgorithmUtil.AlgorithmType.TYPE_AIC
ARE, bodyFatData.getSex (), bodyFatData.getAge (),
Double.valueOf (ParseData.getKgWeight (bodyFatData.getWeight (),
bodyFatData.getDecimalInfo ())), bodyFatData .getHeight (),
bodyFatData.getAdc ());

If you need to obtain 6 additional physical indicators such as fat-free weight and weight control, please call getMoreFatData to get a MoreFatData object.
AicareBleConfig.getMoreFatData (int sex, int height, double weight,
double bfr, double rom, double pp)

```

## 8 Give instructions to the device
## Give instructions to the device
Get an instance of WBYService.WBYBinder in BleProfileServiceReadyActivity.onServiceBinded (WBYService.WBYBinder binder), and call the method in binder

```
@@ -374,20 +388,18 @@ Get an instance of WBYService.WBYBinder in BleProfileServiceReadyActivity.onServ
    
```

## 9 Class description
## Class description

//aicare.net.cn.iweightlibrary.entity:

#### 1.AlgorithmInfo (Algorithm Sequence Information)
- aicare.net.cn.iweightlibrary.entity.AlgorithmInfo (Algorithm Sequence Information)

```
Type Parameter //Description
double weight // weight
double weight // weight
int algorithmId //algorithm ID
int adc // impedance value
DecimalInfo decimalInfo //number of decimal places
```
#### 2.BM09Data (BM09 data)
- BM09Data (BM09 data)

```
Type Parameter //Description
@@ -406,12 +418,12 @@ long timeMillis //measurement timestamp
whether boolean //isStable is stable

```
#### 3.BM15Data (BM15 data)
- BM15Data (BM15 data)
```
Type Parameter name //Description
String version //Bluetooth version
int agreementType //agreementType
int unitType //unitType
int unitType //unitType
double weight // weight
int adc //impedance value
double temp //temperature (if temp = 6553.5, the scale does not support temperature)
@@ -420,14 +432,14 @@ int did //(currently useless)
int bleType// Bluetooth type (0x15)
String address// device address
```
#### 4.BodyFatData
- BodyFatData
```
Type Parameter // Description
String date //measurement date
String time //time
double weight //weight
double bmi
double bfr
double bmi
double bfr
double sfr
int uvi //visceral fat index
double rom //muscle rate
@@ -442,7 +454,7 @@ int age //(1; male; 2, female)
int height
int adc //impedance value
```
#### 5.BroadData (broadcast data)
- BroadData (broadcast data)
```
Type Parameter Description
String name //device name
@@ -452,7 +464,7 @@ int rssi //signal value
byte [] specificData //broadcast data
int deviceType //device type
```
#### 6.DecimalInfo (decimal point information)
- DecimalInfo (decimal point information)
```
Type Parameter Description
int sourceDecimal // source data decimal places
@@ -462,7 +474,7 @@ int stDecimal //st number of decimal places
int kg //Graduation kg
int lb //Graduation lb
```
#### 7.User (User Information)
- User (User Information)
```
Type Parameter name Description
int id
@@ -472,7 +484,7 @@ int height
int weight
int adc //impedance (deprecated)
```
#### 8.WeightData (weight data)
- WeightData (weight data)
```
Type Parameter name Description
int cmdType //command type (1, change; 2, stable; 3, in impedance measurement)
@@ -482,10 +494,10 @@ double temp //temperature (if the temperature is Double.MAX_VALUE, the scale doe
DecimalInfo decimalInfo
int adc //impedance value
int algorithmType // algorithm ID
int unitType
int unitType
int deviceType //device type
```
#### 9.cn.net.aicare.algorithmutil.BodyFatData(Calculated body fat data)
- cn.net.aicare.algorithmutil.BodyFatData(Calculated body fat data)
```
Type Parameter name Description
double bmi; Body mass index
@@ -500,7 +512,7 @@ int bodyAge; physical bodyAge
double pp; protein percentage
```

#### 10.MoreFatData
- MoreFatData
```
Type Parameter name Description
double standardWeight; Standard weight
@@ -518,7 +530,7 @@ public static enum FatLevel {
FAT; overweight
}
```
#### 11.BleProfileService Connection Status
- BleProfileService Connection Status
```
public static final int STATE_CONNECTING = 4; // connecting
public static final int STATE_DISCONNECTED = 0; // disconnect
@@ -527,7 +539,7 @@ public static final int STATE_SERVICES_DISCOVERED = 2; // Discover services
public static final int STATE_INDICATION_SUCCESS = 3; // Enable success
public static final int STATE_TIME_OUT = 5; // connection timed out
```
#### 12.AicareBleConfig.SettingStatus Status information returned by the device
- AicareBleConfig.SettingStatus Status information returned by the device
```
        int NORMAL = 0; // Normal
        int LOW_POWER = 1; // Low power
@@ -557,7 +569,7 @@ public static final int STATE_TIME_OUT = 5; // connection timed out
        int DATA_SEND_END = 25; // Measured data transmission is complete
        int UNKNOWN = -1; // unknown
```
#### 13.WBYService Bluetooth information returned by the device
- WBYService Bluetooth information returned by the device
```
    public final static int BLE_VERSION = 0; // Bluetooth version
    public final static int MCU_DATE = 1; // mcu date
@@ -565,3 +577,43 @@ public static final int STATE_TIME_OUT = 5; // connection timed out
    public final static int USER_ID = 3; // user number
    public final static int ADC = 4; // impedance value
```
## FAQ

- How to judge whether the currently scanned BroadData (device) is a broadcast scale or a connected scale?
According to the value of deviceType attribute of BroadData:
deviceType == AicareBleConfig.TYPE_WEI_BROAD is a broadcast scale without temperature
deviceType == AicareBleConfig.TYPE_WEI_TEMP_BROAD is a broadcast scale with temperature
deviceType == AicareBleConfig.TYPE_WEI is a connected scale without temperature
deviceType == AicareBleConfig.TYPE_WEI_TEMP is a connected scale with temperature

- Which units does the Bluetooth protocol support?
Units only support up to 4 types (kg, lb, st, kg), please refer to the factory settings of the scale for specific units supported.

- Can't scan the Bluetooth device?
A. Check whether the permissions of the App are normal. The 6.0 and above systems must locate the permissions and need to manually obtain the permissions
B. Check if the location service of the mobile phone is turned on, some mobile phones may need to turn on GPS
C. Unplug the battery and restart the scale
D. Whether it is connected by other mobile phones (when the scale is not connected, the Bluetooth icon on the weighing pan will continue to flash)

- Which devices are supported?
Support BM series connection scale, BM15 broadcast scale

- How does the connected scale determine the end of measurement?
OnGetFatData () method callback means the measurement is completed

- How do broadcast scales determine the end of measurement?
All the data of the broadcast scale is returned from getAicareDevice and parsed to get the WeightData object. GetCmdType () == 3 in WeightData indicates that the measurement is completed, please refer to the demo for details

- The data displayed by the scale is inconsistent with the data received by the app
A. The SDK will request decimals by default, and you can use getDecimalInfo () in WBYBinder to actively obtain decimals
B.app needs to pass in DecimalInfo (decimal object) to calculate the weight
```
DecimalInfo {
    private int sourceDecimal; // The source data decimal places
    private int kgDecimal; // kg decimal places
    private int lbDecimal; // lb decimal places
    private int stDecimal; // st decimal places
    private int kgGraduation; // kg division
    private int lbGraduation; // lb division
}
```

+ 100
- 46
README_CN.md Wyświetl plik

@@ -3,13 +3,28 @@

[![](https://jitpack.io/v/elinkthings/BodyFatScaleSDKRepositoryAndroid.svg)](https://jitpack.io/#elinkthings/BodyFatScaleSDKRepositoryAndroid)

[aar包下载地址](https://github.com/inet2018/BodyFatScaleSDKRepositoryAndroid/releases)
[key注册地址](http://sdk.aicare.net.cn)
[aar包下载地址](https://github.com/elinkthings/BodyFatScaleSDKRepositoryAndroid/releases)
[key申请地址](http://sdk.aicare.net.cn)
[English documentation](README.md)

该文档为指导Android开发人员在Android 4.4及以上系统中集成好身材-SDK-Android,主要为一些关键的使用示例

## 一、导入SDK
## 概述
- 什么是elink体脂秤SDK ?

> elink体脂秤SDK 是提供给elink合作伙伴的蓝牙开发工具,该SDK对elink蓝牙协议进行了实现和封装,负责手机App与蓝牙体脂秤设备之间的通信,旨在方便合作伙伴定制自己的蓝牙体脂秤应用。

- 适用范围

> 需要个性化定制自己的 Android 蓝牙体脂秤 APP 的合作伙伴。



## 使用条件
1,最低版本 android4.4(API 19)
2,设备所使用的蓝牙版本需要4.0及以上


## 导入SDK


```
@@ -34,17 +49,12 @@ repositories {
implementation 'com.github.elinkthings:BodyFatScaleSDKRepositoryAndroid:1.2.4'
}





也可以使用aar包依赖,请自行下载放到项目的libs中



```

## 二、权限设置
## 权限设置

```
<!--In most cases, you need to ensure that the device supports BLE.-->
@@ -65,7 +75,13 @@ repositories {

> 6.0及以上系统必须要定位权限,且需要手动获取权限

## 三、开始集成
## 开始集成

> 首先给SDK配置key和secret,[申请地址](http://sdk.aicare.net.cn)
```
//在主项目的application中调用
AiFitSDK.getInstance().init(this, key, secret);
```

> 在AndroidManifest.xml application标签下面增加
```
@@ -79,12 +95,6 @@ repositories {
```


> 初始化 [key注册地址](http://sdk.aicare.net.cn)
```
//在application中调用
AiFitSDK.getInstance().init(this, key, secret);
```

> 你可以直接让你自己的`Activity`类继承`BleProfileServiceReadyActivity`

```
@@ -109,7 +119,7 @@ public class MyActivity extends BleProfileServiceReadyActivity

```

## 四、扫描设备,停止扫描设备,查看扫描状态
## 扫描设备,停止扫描设备,查看扫描状态
与扫描相关的API如下,详情参考BleProfileServiceReadyActivity类,具体使用参考sample工程

```
@@ -122,7 +132,7 @@ public class MyActivity extends BleProfileServiceReadyActivity


}
//调用stopScan方法停止扫描 该方便不建议客户自己调用
//调用stopScan方法停止扫描
stopScan();
//调用isScanning方法查看是否在扫描 true:正在扫描; false:已停止扫描
isScanning();
@@ -155,7 +165,7 @@ public class MyActivity extends BleProfileServiceReadyActivity
```


## 五、连接设备,断开设备
## 连接设备,断开设备

与连接相关的API如下,详情参考BleProfileServiceReadyActivity类,具体使用参考sample工程。

@@ -174,9 +184,9 @@ startConnect(String address)
binder.disconnect()
```

使用`startConnect`方法连接体脂秤,使用`onStateChanged`方法监听连接的状态,使用`onError`方法监听连接过程中的异常,以便于进行额外的处理和问题排查。使用`isDeviceConnected`方法判断连接是否已经建立。
> 使用`startConnect`方法连接体脂秤,使用`onStateChanged`方法监听连接的状态,使用`onError`方法监听连接过程中的异常,以便于进行额外的处理和问题排查。使用`isDeviceConnected`方法判断连接是否已经建立。

## 连接成功,接受秤返回的数据
## 连接成功,接受秤返回的数据
以下方法或接口可直接在继承BleProfileServiceReadyActivity类后自动获得

```
@@ -225,24 +235,26 @@ startConnect(String address)
```
> 注意:这些接口或方法部分需要APP给体脂下发命令才会有返回数据.

## 七 调用SDK中的算法计算数据
在AicareBleConfig中包含有体脂数据相关的算法可供调用
## 调用SDK中的算法库
- 如果设备返回阻抗,没有体脂数据可以通过继承BleProfileServiceReadyActivity中的onGetFatData方法获得 BodyFatData 对象,调用AicareBleConfig.getBodyFatData方法计算得到cn.net.aicare.algorithmutil.BodyFatData对象
使用方法:
```
如果设备返回阻抗,没有体脂数据可以调用getBodyFatData方法计算,通过 BodyFatData 对象中的数据调用算法得到cn.net.aicare.algorithmutil.BodyFatData
如下:

AicareBleConfig.getBodyFatData(AlgorithmUtil.AlgorithmType.TYPE_AIC
ARE, bodyFatData.getSex(), bodyFatData.getAge(),
Double.valueOf(ParseData.getKgWeight(bodyFatData.getWeight(),
bodyFatData.getDecimalInfo())), bodyFatData .getHeight(),
bodyFatData.getAdc());

如需要获取去脂体重,体重控制量等额外的 6 项身体指标,请调用getMoreFatData计算得到 MoreFatData 对象
```
- 如需要获取去脂体重,体重控制量等额外的 6 项身体指标,请调用调用AicareBleConfig.getMoreFatData计算得到 MoreFatData 对象
使用方法:
```
AicareBleConfig.getMoreFatData(int sex, int height, double weight,
double bfr, double rom, double pp)

```

## 给设备下发指令
## APP给设备下发指令
在BleProfileServiceReadyActivity.onServiceBinded(WBYService.WBYBinder binder)获得WBYService.WBYBinder的实例,调用binder里面方法

```
@@ -375,11 +387,9 @@ double bfr, double rom, double pp)
```


## 九 类说明

//aicare.net.cn.iweightlibrary.entity
## 类说明

#### 1.AlgorithmInfo(算法序列信息)
- aicare.net.cn.iweightlibrary.entity.AlgorithmInfo(算法序列信息)
```
类型 参数名 说明
double weight 体重
@@ -388,7 +398,7 @@ int adc 阻抗值
DecimalInfo decimalInfo 小数点位数
```

#### 2.BM09Data(BM09数据)
- BM09Data(BM09数据)
```
类型 参数名 说明
int agreementType 协议类型
@@ -405,7 +415,7 @@ String address 设备地址
long timeMillis 测量时间戳
boolean isStable 是否稳定
```
#### 3.BM15Data(BM15数据)
- BM15Data(BM15数据)
```
类型 参数名 说明
String version 蓝牙版本
@@ -420,7 +430,7 @@ int bleType 蓝牙类型(0x15)
String address 设备地址
```

#### 4.BodyFatData(体脂数据)
- BodyFatData(体脂数据)
```
类型 参数名 说明
String date 测量日期
@@ -443,7 +453,7 @@ int height 身高
int adc 阻抗值
```

#### 5.BroadData(广播数据)
- BroadData(广播数据)
```
类型 参数名 说明
String name 设备名
@@ -453,7 +463,7 @@ int rssi 信号值
byte[] specificData 广播数据
int deviceType 设备类型
```
#### 6.DecimalInfo(小数点位数信息)
- DecimalInfo(小数点位数信息)
```
类型 参数名 说明
int sourceDecimal 源数据小数点位数
@@ -463,7 +473,7 @@ int stDecimal st小数点位数
int kgGraduation kg分度
int lbGraduation lb分度
```
#### 7.User(用户信息)
- User(用户信息)
```
类型 参数名 说明
int id 编号
@@ -473,7 +483,7 @@ int height 身高
int weight 体重
int adc 阻抗值(弃用)
```
#### 8.WeightData(体重数据)
- WeightData(体重数据)
```
类型 参数名 说明
int cmdType 命令类型(1、变化;2、稳定;3、阻抗测量中)
@@ -485,7 +495,7 @@ int algorithmType 算法ID
int unitType 单位类型
int deviceType 设备类型
```
#### 9.cn.net.aicare.algorithmutil.BodyFatData(计算得到的体脂数据)
- cn.net.aicare.algorithmutil.BodyFatData(计算得到的体脂数据)
```
类型 参数名 说明
double bmi; 身体质量指数
@@ -500,7 +510,7 @@ int bodyAge; 身体年龄 physical bodyAge
double pp; 蛋白率 protein percentage
```

#### 10.MoreFatData
- MoreFatData
```
类型 参数名 说明
double standardWeight; 标准体重
@@ -518,7 +528,7 @@ public static enum FatLevel {
FAT; 超重
}
```
#### 11.BleProfileService 连接状态
- BleProfileService 连接状态
```
public static final int STATE_CONNECTING = 4; //连接中
public static final int STATE_DISCONNECTED = 0; //断开连接
@@ -527,7 +537,7 @@ public static final int STATE_SERVICES_DISCOVERED = 2;//发现服务
public static final int STATE_INDICATION_SUCCESS = 3;//使能成功
public static final int STATE_TIME_OUT = 5;//连接超时
```
#### 12.AicareBleConfig.SettingStatus 设备返回的状态信息
- AicareBleConfig.SettingStatus 设备返回的状态信息
```
int NORMAL = 0;//正常
int LOW_POWER = 1;//低功耗
@@ -557,11 +567,55 @@ public static final int STATE_TIME_OUT = 5;//连接超时
int DATA_SEND_END = 25;//测量数据发送完成
int UNKNOWN = -1;//未知
```
#### 13.WBYService 设备返回的蓝牙信息
- WBYService 设备返回的蓝牙信息
```
public final static int BLE_VERSION = 0; //蓝牙版本
public final static int MCU_DATE = 1; //mcu日期
public final static int MCU_TIME = 2; //mcu 时间
public final static int USER_ID = 3; //用户编号
public final static int ADC = 4; //阻抗值
```
```


## FAQ

- 如何判断区分当前扫描到的BroadData(设备)是广播秤还是连接秤?
根据BroadData的deviceType属性值区分:
deviceType==AicareBleConfig.TYPE_WEI_BROAD是不带温度的广播秤
deviceType==AicareBleConfig.TYPE_WEI_TEMP_BROAD是有温度的广播秤
deviceType==AicareBleConfig.TYPE_WEI是不带温度的连接秤
deviceType==AicareBleConfig.TYPE_WEI_TEMP是有温度的连接秤

- 蓝牙协议支持哪些单位?
单位最多只支持4种(kg,lb,st,斤),具体支持什么单位请参照秤的出厂设置。

- 扫描不到蓝牙设备?
A.查看App权限是否正常,6.0及以上系统必须要定位权限,且需要手动获取权限
B.查看手机的定位服务是否开启,部分手机可能需要打开GPS
C.拔掉电池重启秤
D.是否被其他手机连接(秤未被连接时,秤盘上蓝牙图标会不断闪烁)

- 支持哪些设备?
支持BM系列的连接秤、BM15广播秤

- 连接秤如何判定测量结束?
onGetFatData()方法回调就代表测量完成

- 广播秤如何判定测量结束?
广播秤所有的数据都是从getAicareDevice返回并解析得到WeightData对象,WeightData中的getCmdType()==3表示测量完成,详细请参考demo

- 秤显示的数据和app收到的数据不一致
A.SDK会默认请求获取小数的,可使用WBYBinder中的getDecimalInfo()主动获取小数位
B.app计算重量的时候需要传入DecimalInfo(小数对象)进行计算
```
DecimalInfo{
private int sourceDecimal;//源数据小数位数
private int kgDecimal;//kg小数位数
private int lbDecimal;//lb小数位数
private int stDecimal;//st小数位数
private int kgGraduation;//kg分度
private int lbGraduation;//lb分度
}
```



Ładowanie…
Anuluj
Zapisz