摄像头二维码配网

更新时间:2022-02-17 07:04:12下载pdf

通过摄像头设备扫描 App 二维码来传递配网信息的方式来实现配网设备。

配网流程

摄像头二维码配网

获取 Token

开始配网之前,SDK 需要在联网状态下从云端获取配网 Token,Token 的有效期为 10 分钟。且配置成功后就会失效,再次配网需要重新获取。

接口说明

TuyaOSActivator.deviceActivator().getActivatorToken(final long homeId, final ITuyaActivatorGetToken activatorGetToken);

参数说明

参数 说明
homeId 站点 ID
activatorGetToken 配网 Token 获取回调

示例代码

TuyaOSActivator.deviceActivator().getActivatorToken(homeId,
		new ITuyaActivatorGetToken() {

			@Override
			public void onSuccess(String token) {

			}

			@Override
			public void onFailure(String s, String s1) {

			}
		});

初始化配网参数

示例代码

TuyaCameraActivatorBuilder builder = new TuyaCameraActivatorBuilder()
		 .setContext(context)
		 .setSsid(ssid)
		 .setPassword(password)
		 .setToken(token)
		 .setTimeOut(timeout)
		 .setListener(new ITuyaSmartCameraActivatorListener() {
			 @Override
			 public void onQRCodeSuccess(String qrcodeUrl) {
				 //返回生成二维码的 URL 链接
			 }

			 @Override
			 public void onError(String errorCode, String errorMsg) {
				 //配网失败
			 }

			 @Override
			 public void onActiveSuccess(DeviceBean devResp) {
				//配网成功
			 }
		 }));

参数说明

参数 说明
token 配网所需要的激活 Token
context 需要传入 activitycontext
ssid 配网之后,设备工作 Wi-Fi 的名称
password 配网之后,设备工作 Wi-Fi 的密码
timeout 配网的超时时间设置,默认是 100s,单位是秒

配网方法调用

  • 配网实现类

    ITuyaCameraDevActivator mTuyaActivator = TuyaOSActivator.deviceActivator().newCameraDevActivator(builder);
    
  • 获取二维码 URL 链接

    mTuyaActivator.createQRCode(); //通过 onQRCodeSuccess 回调返回
    
  • 根据 URL 生成二维码

    示例:需要依赖 zxingimplementation 'com.google.zxing:core:3.2.1'

    public static Bitmap createQRCode(String url, int widthAndHeight)
    			throws WriterException {
    		Hashtable hints = new Hashtable();
    		hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
    		hints.put(EncodeHintType.MARGIN,0);
    		BitMatrix matrix = new MultiFormatWriter().encode(url,
    				BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight, hints);
    
    		int width = matrix.getWidth();
    		int height = matrix.getHeight();
    		int[] pixels = new int[width * height];
    
    		for (int y = 0; y < height; y++) {
    			for (int x = 0; x < width; x++) {
    				if (matrix.get(x, y)) {
    					pixels[y * width + x] = BLACK;
    				}
    			}
    		}
    		Bitmap bitmap = Bitmap.createBitmap(width, height,
    				Bitmap.Config.ARGB_8888);
    		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    		return bitmap;
    	}
    
  • 开始配网

    mTuyaActivator.start();
    
  • 停止配网

    mTuyaActivator.stop();
    
  • 销毁数据

    mTuyaActivator.onDestory();