3. 表盘操作

表盘功能管理,包括:遍历文件列表,添加表盘,删除表盘,获取表盘,获取当前表盘信息,切换表盘,设置自定义表盘背景等等

3.1. 遍历文件列表

获取表盘相关文件列表

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
WatchManager watchManager = WatchManager.getInstance();
watchManager.listWatchList(new OnWatchOpCallback<ArrayList<FatFile>>() {
    @Override
    public void onSuccess(ArrayList<FatFile> result) {
        //成功回调
        //result 是结果,(watch或WATCH)前缀的是表盘文件,(bgp_w或BGP_W)前缀的是自定义背景文件
        //可以过滤获取所有Watch文件
    }

    @Override
    public void onFailed(BaseError error) {
       //失败回调
    }
});

Note

  1. FatFile

3.1.1. FatFile

public class FatFile implements Parcelable {
    //文件大小
    private long size;
    //文件名
    private String name;
    //是否文件夹 (若false,则是文件)
    private boolean isDir;
    //修改时间 [格式: YYYY/MM/DD hh:mm:ss]
    private String modifyTime;
    //绝对路径
    private String path;

    //是否文件
    private boolean file;
    //是否unicode编码
    private boolean unicode;
    //簇号
    private int cluster;
    //文件序号
    private short fileNum;
    //设备驱动索引
    private byte devIndex;
}

3.2. 插入表盘

插入新的表盘文件

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
WatchManager watchManager = WatchManager.getInstance();
//filePath是表盘文件路径,必须存在
//isNoNeedCheck:是否跳过文件校验
// - false: 表盘文件需要文件校验
// - true :  自定义背景文件不需要文件校验,但需要转换工具进行算法转换
//OnFatFileProgressListener:进度监听器
watchManager.createWatchFile(filePath, false, new OnFatFileProgressListener() {
    @Override
    public void onStart(String filePath) {
        //回调开始
    }

    @Override
    public void onProgress(float progress) {
        //回调进度
    }

    @Override
    public void onStop(int result) {
        //回调结束
        //result : 0 --- 成功  非0是错误码,参考WatchError
    }
});

Warning

表盘文件的判断可由固件工程师修改
下面是公版固件SDK的表盘文件判断方式
插入表盘文件的格式说明:
  1. 表盘文件是前缀 WATCH_ 的文件

  2. 表盘自定义背景文件是前缀 BGP_W 的文件

Important

  1. 文件路径必须存在

  2. 自定义表盘背景必须通过转换工具进行转换, 参考 图像转换

3.3. 删除表盘

删除已存在的表盘文件

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
WatchManager watchManager = WatchManager.getInstance();
//watchPath: 设备存在的表盘文件路径
//OnFatFileProgressListener:进度监听器
watchManager.deleteWatchFile(watchPath, new OnFatFileProgressListener() {
    @Override
    public void onStart(String filePath) {
        //回调开始
    }

    @Override
    public void onProgress(float progress) {
        //回调进度
    }

    @Override
    public void onStop(int result) {
        //回调结束
        //result : 0 --- 成功  非0是错误码,参考WatchError
    }
});

Important

  1. 表盘文件路径必须存在于设备

  2. 错误码参考 3.13   错误码定义

3.4. 获取当前表盘信息

获取当前使用的表盘信息

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
WatchManager watchManager = WatchManager.getInstance();
watchManager.getCurrentWatchInfo(new OnWatchOpCallback<FatFile>() {
    @Override
    public void onSuccess(FatFile result) {
        //成功回调 - FatFile是表盘信息
    }

    @Override
    public void onFailed(BaseError error) {
        //失败回调
    }
});

Note

  1. FatFile

3.5. 获取表盘额外信息

获取表盘文件的额外信息, 比如版本, 服务器对应的UUID等

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
WatchManager watchManager = WatchManager.getInstance();
//watchPath:设备表盘文件的路径
watchManager.getWatchMessage(watchPath, new OnWatchOpCallback<String>() {
    @Override
    public void onSuccess(String result) {
        //成功回调,result是表盘额外信息
        //格式:[version],[uuid],
    }

    @Override
    public void onFailed(BaseError error) {
        //失败回调
    }
});

3.6. 设置当前使用表盘

设置当前使用表盘。通过此功能切换表盘

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
WatchManager watchManager = WatchManager.getInstance();
// watchPath:必须存在于设备的表盘文件路径
watchManager.setCurrentWatchInfo(watchPath, new OnWatchOpCallback<FatFile>() {
    @Override
    public void onSuccess(FatFile result) {
        //成功回调 - FatFile是表盘信息
    }

    @Override
    public void onFailed(BaseError error) {
        //失败回调
    }
});

Note

  1. FatFile

3.7. 获取表盘对应的自定义背景信息

获取指定表盘对应的自定义背景信息

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
WatchManager watchManager = WatchManager.getInstance();
//watchPath:设备表盘文件的路径
watchManager.getCustomWatchBgInfo(watchPath, new OnWatchOpCallback<String>() {
    @Override
    public void onSuccess(String result) {
        //成功回调,result是背景文件的路径
        //如果result是“null”,则是空路径,不存在自定义背景
        //如果result不是“null”,则是背景文件的路径
    }

    @Override
    public void onFailed(BaseError error) {
        //失败回调
    }
});

Important

  1. 若结果是 null ,意味着不存在自定义背景

  2. 若结果不是 null , 则是背景文件的路径

3.8. 使能表盘自定义背景

为当前使用的表盘使能指定的自定义背景

示例代码

 //WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
WatchManager watchManager = WatchManager.getInstance();
//watchBgPath: 表盘背景路径
//若watchBgPath为“/null”,则视为当前表盘清除自定义背景的绑定
//若watchBgPath不为“/null”,则为当前表盘绑定自定义背景
watchManager.enableCustomWatchBg(watchBgPath, new OnWatchOpCallback<FatFile>() {
    @Override
    public void onSuccess(FatFile result) {
        //成功回调 - FatFile是自定义背景文件信息
    }

    @Override
    public void onFailed(BaseError error) {
        //失败回调
    }
});

Important

  1. 若表盘背景路径为 /null ,则视为当前表盘清除自定义背景的绑定

  2. 若表盘背景路径不为 /null ,则为当前表盘绑定自定义背景

3.9. 资源更新

更新设备资源文件

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
WatchManager watchManager = WatchManager.getInstance();
//resourcePath: 资源路径 (zip压缩包)
//OnUpdateResourceCallback: 更新资源进度监听器
watchManager.updateWatchResource(resourcePath, new OnUpdateResourceCallback() {
    @Override
    public void onStart(String filePath, int total) {
        //回调开始
        //filePath -- 资源文件路径
        //total -- 更新文件总数
    }

    @Override
    public void onProgress(int index, String filePath, float progress) {
        //回调进度
        //index -- 序号 (从0开始)
        //filePath -- 资源文件路径
        //progress -- 更新进度
    }

    @Override
    public void onStop(String otaFilePath) {
        //回调更新结束
        //otaFilePath: 固件升级文件路径
        //若固件升级文件不为null,则意味着需要进行OTA升级
    }

    @Override
    public void onError(int code, String message) {
        //回调错误事件
        //code -- 错误码 (参考WatchError)
        //message -- 错误信息
    }
});

Important

  1. 确保压缩包文件正常且完整

  2. 若返回OTA文件路径,则需要执行OTA固件功能。参考 杰理OTA外接库开发文档(Android)

3.9.1. 流程图

../../_images/update_resource_flow.png

3.10. 系统恢复

系统出现异常时,用于恢复系统

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
final WatchManager watchManager = WatchManager.getInstance();
//注册手表事件回调
watchManager.registerOnWatchCallback(new OnWatchCallback() {
    //系统异常回调
    @Override
    public void onWatchSystemException(BluetoothDevice device, int sysStatus) {
        if(sysStatus != 0){ //系统状态不为0,则是系统异常
            //监听到系统异常,才调用此方法恢复系统
            //正常情况,禁止调用此方法
            watchManager.restoreWatchSystem(new OnFatFileProgressListener() {
                @Override
                public void onStart(String filePath) {
                    //回调开始
                }

                @Override
                public void onProgress(float progress) {
                    //回调进度
                }

                @Override
                public void onStop(int result) {
                    //回调结果
                    //result : 0 --- 成功  非0是错误码,参考WatchError
                }
            });
        }
    }
});

Important

  1. 禁止在系统正常运行的情况下,使用该接口

  2. 错误码参考 3.13   错误码定义

3.11. 表盘操作流程

3.11.1. 添加表盘文件

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
final WatchManager watchManager = WatchManager.getInstance();
//执行插入表盘操作并等待结果回调
watchManager.createWatchFile(watchFilePath, false, new OnFatFileProgressListener() {
    @Override
    public void onStart(String filePath) {
        //回调开始插入表盘
    }

    @Override
    public void onProgress(float progress) {
        //回调插入表盘进度
    }

    @Override
    public void onStop(int result) {
        //回调插入表盘结果
        if (result == 0) { //插入表盘成功
            //设置当前表盘为插入表盘
            watchManager.setCurrentWatchInfo(FatUtil.getFatFilePath(watchFilePath), new OnWatchOpCallback<FatFile>() {
                @Override
                public void onSuccess(FatFile result) {
                    //设置当前表盘成功
                }

                @Override
                public void onFailed(BaseError error) {
                    //操作失败
                }
            });
        } else {
            //插入文件失败
        }
    }
});

3.11.2. 添加表盘背景文件

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
final WatchManager watchManager = WatchManager.getInstance();
//执行插入自定义表盘背景文件操作并等待结果回调
watchManager.createWatchFile(bgFilePath, true, new OnFatFileProgressListener() {
    @Override
    public void onStart(String filePath) {
        //回调开始插入表盘背景文件
    }

    @Override
    public void onProgress(float progress) {
        //回调插入表盘背景文件进度
    }

    @Override
    public void onStop(int result) {
        //回调插入表盘背景文件结果
        if (result == 0) { //插入表盘背景文件成功
            //设置表盘背景文件为当前表盘的自定义背景
            watchManager.enableCustomWatchBg(FatUtil.getFatFilePath(bgFilePath), new OnWatchOpCallback<FatFile>() {
                @Override
                public void onSuccess(FatFile result) {
                    //激活自定义背景成功
                }

                @Override
                public void onFailed(BaseError error) {
                    //操作失败
                }
            });
        }else{
            //插入文件失败
        }
    }
});

Note

插入其他文件可以参考 添加表盘背景文件 实现

3.11.3. 查询当前表盘的所有信息

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
final WatchManager watchManager = WatchManager.getInstance();
//查询当前表盘信息
watchManager.getCurrentWatchInfo(new OnWatchOpCallback<FatFile>() {
    @Override
    public void onSuccess(FatFile result) {
        //回调当前表盘信息
        //查询当前表盘的自定义背景信息
        watchManager.getCustomWatchBgInfo(result.getPath(), new OnWatchOpCallback<String>() {
            @Override
            public void onSuccess(String result) {
                //result 如果是null, 就是默认背景
                //result 若不是null, 则是自定义背景文件的路径
            }

            @Override
            public void onFailed(BaseError error) {
                //操作失败
            }
        });
    }

    @Override
    public void onFailed(BaseError error) {
        //操作失败
    }
});

3.12. 获取手表系统剩余空间大小

获取手表系统剩余空间大小

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
final WatchManager watchManager = WatchManager.getInstance();
//获取手表系统剩余空间
watchManager.getWatchSysLeftSize(new OnWatchOpCallback<Long>() {
    @Override
    public void onSuccess(Long result) {
        //手表剩余空间
    }

    @Override
    public void onFailed(BaseError error) {
        //错误信息
    }
});

Important

  1. 注意调用时机, 必须在手表系统初始化完成之后调用

3.13. 获取表盘文件的大小

获取表盘文件的大小

示例代码

//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
final WatchManager watchManager = WatchManager.getInstance();
//fatFilePath : 表盘文件路径(必须存在)
//获取表盘文件的大小
watchManager.getWatchFileSize(fatFilePath, new OnWatchOpCallback<WatchFileContent>() {
    @Override
    public void onSuccess(WatchFileContent result) {
        result.getFileSize(); //表盘文件的大小
        result.getCrc();      //表盘文件的CRC (AC695X的SDK, 此此字段无效)
    }

    @Override
    public void onFailed(BaseError error) {
        //错误信息
    }
});

Important

  1. 表盘文件路径必须存在设备

  2. CRC字段, 在AC695X的手表SDK无效, 在AC701X的手表SDK有效