Android 接入指南

SDK支持平台

  • Android 5.0及以上版本

Proguard

-keep class cn.icomon.icdevicemanager.ICDeviceManager { *; }
-keep class cn.icomon.icdevicemanager.ICBluetoothSystem { *; }
-keep public interface cn.icomon.icdevicemanager.ICBluetoothSystem$ICBluetoothDelegate { *; }
-keep public class cn.icomon.icdevicemanager.ICBluetoothSystem$ICOPBleCharacteristic { *; }
-keep public enum cn.icomon.icdevicemanager.ICBluetoothSystem$ICOPBleWriteDataType { *; }
-keep class cn.icomon.icdevicemanager.manager.setting.ICSettingManagerImpl { *; }
-keep class cn.icomon.icdevicemanager.manager.algorithms.ICBodyFatAlgorithmsImpl { *; }
-keep class cn.icomon.icdevicemanager.ICDeviceManagerDelegate { *; }
-keep class cn.icomon.icdevicemanager.model.** { *; }
-keep class cn.icomon.icdevicemanager.ICDeviceManagerSettingManager { *; }
-keep public interface cn.icomon.icdevicemanager.ICDeviceManagerSettingManager$ICSettingCallback { *; }
-keep class com.icomon.icbodyfatalgorithms.** { *; }
-keep class cn.icomon.icbleprotocol.** { *; }
-keep class cn.icomon.icdevicemanager.ICBodyFatAlgorithmsManager { *; }
-keep class cn.icomon.icdevicemanager.ICBluetoothSystem.** { *; }
-keep class cn.icomon.icdevicemanager.callback.** { *; }

权限

AndroidManifest.xml 声明

<uses-permission 
    android:name="android.permission.BLUETOOTH"
    android:maxSdkVersion="30"/>
<uses-permission 
    android:name="android.permission.BLUETOOTH_ADMIN" 
    android:maxSdkVersion="30"/>
<uses-permission 
    android:name="android.permission.ACCESS_COARSE_LOCATION" 
    android:maxSdkVersion="30"/>
<uses-permission
     android:name="android.permission.ACCESS_FINE_LOCATION" 
     android:maxSdkVersion="30"/>
<uses-permission 
    android:usesPermissionFlags="neverForLocation"  
    android:name="android.permission.BLUETOOTH_SCAN"/>
<uses-permission 
    android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission 
    android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-feature 
    android:name="android.hardware.bluetooth_le" 
    android:required="true"/>

动态获取权限说明:

  • 1.Android 6Android 11 需要动态获取 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION 权限
  • 2.Android 10Android 11 蓝牙扫描需要开启 定位开关
  • 3.Android 12 及以上 需要动态获取 BLUETOOTH_CONNECTBLUETOOTH_SCAN 权限

定位相关疑问请查阅Android官方: https://developer.android.com/guide/topics/connectivity/bluetooth

代码示例

检查是否已获取蓝牙扫描、连接所需要的权限

    private boolean checkBLEConnectionPermission() {
        boolean isGranted = false;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED) {
                isGranted = true;
            }
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                isGranted = true;
            }
        } else {
            isGranted = true;
        }
        return isGranted;
    }

请求获取蓝牙扫描、连接所需要的权限

private void requestBLEConnectionPermission() {
    String[] arrayPermission;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        arrayPermission = new String[]{Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.BLUETOOTH_SCAN};
    } else {
        arrayPermission = new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
    }
    ActivityCompat.requestPermissions(this, arrayPermission, CODE_REQUEST_PERMISSION);
}

Android 10Android 11 定位开关相关

public static boolean needOpenGpsSwitch() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && Build.VERSION.SDK_INT <= Build.VERSION_CODES.R;
}

public static boolean isOpenGpsSwitch(Context context) {
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    if (locationManager != null && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        return true;
    } else {
        return false;
    }
}

导入SDK

SDK使用Java与C++混合开发,提供aar包进行导入.

因导入方式有多种,这里仅列出其中一种,导入步骤如下:

导入SDK 导入SDK 导入SDK 导入SDK

SDK接入流程

初始化SDK

调用ICDeviceManager.shared().initMgrWithConfig(cfg)进行初始化SDK,在初始化之前,建议调用ICDeviceManager.shared().setDelegate(delegate)设置好代理对象。否则可能会丢失部分回调。如:

ICDeviceManager.shared().setDelegate(this);
ICDeviceManager.shared().initMgrWithConfig(cfg);

扫描设备

SDK初始化完成后,如果需要查找附近的设备,可以调用扫描接口来进行扫描设备:

ICDeviceManager.shared().scanDevice(delegate);

设备将通过扫描回调代理对象进行回调(调用扫描接口前,请确保蓝牙是否开启,否则该接口不会生效,如正常扫描过程中关闭蓝牙,然后再次打开蓝牙,请重新调用该接口,SDK不会自动去开启扫描).

注: 如果已知道设备的mac地址,可以直接调用添加设备接口,不用调用扫描接口。SDK内部会自动去连接这个设备。

停止扫描

调用了扫描设备接口,在已经找到需要的设备后,请调用停止扫描(sdk不会自动停止):

ICDeviceManager.shared().stopScan();

添加设备

如果已经找到需要的设备了,调用添加设备接口:

ICDeviceManager.shared().addDevice(device,addCallback);

接口可以时SDK去连接设备并收取数据(请确保设备处于亮屏状态,否则SDK将会不会收到数据, 中途蓝牙关闭或设备息屏,当蓝牙重新开启或设备再次亮屏,SDK会自动去连接,无需再次添加设备或扫描设备).

删除设备

当不想SDK去连接和收取设备数据时,从SDK移除该设备,可以调用移除设备接口:

ICDeviceManager.shared().removeDevice(device,removeCallback);

更新用户信息

因为要计算用户的体脂以及一些其他数据,所以需要App调用更新用户信息接口:

ICDeviceManager.shared().updateUserInfo(userInfo);

日志目录

如出现SDK收不到数据或连接异常等情况,请把SDK日志发给我们,获取SDK日志目录:

ICDeviceManager.shared().getLogPath();

设备设置接口

部分设备支持设置单位或卡路里等属性,获取这些设置接口:

ICDeviceManager.shared().getSettingManager();

体脂算法接口

获取体脂算法接口:

ICDeviceManager.shared().getBodyFatAlgorithmsManager();
GUANGDONG WELLAND TECHNOLOGY CO.,LTD All Right ReservedUpdate time: 2024-02-06 14:46:19

results matching ""

    No results matching ""

    results matching ""

      No results matching ""