Skip to content

Latest commit

 

History

History
166 lines (127 loc) · 5.39 KB

5.md

File metadata and controls

166 lines (127 loc) · 5.39 KB

バイブレーション機能を作る

バイブレーション機能に限りませんが、DeviceConnectはSDKを使うことで機能の実装がほとんど同じようなコードで実現できます。

イベントハンドリングを作る

バイブレーションは #vibrate をクリックしたイベントで処理を行います。つまり '#vibrate click' の中に作ります(この処理はすでに app.js に記述してあります)。

処理はこれだけです。

// バイブレーション実行
'#vibrate click': function(e) {
  this.dcLogic.vibrate()
  // 処理成功
  .then(function(message) {
    alert(message);
  })
  // 処理失敗
  .fail(function(error) {
    alert(JSON.stringify(error));
  });
},

ロジックを作る

続いてロジックの処理を作ります。現状は次のようになっています。

// バイブレーション
vibrate: function() {
  var dfd = this.deferred();
  return dfd.promise();
},

バイブレーションAPIはバイブレーションAPI - DeviceConnect Usersによると、次のように実行します。

PUT /gotapi/vibration/vibrate

キー 必須 場所 説明
serviceId 文字列 クエリー サービスID
accessToken 文字列 クエリー アクセストークン
pattern 文字列 クエリー バイブレーションのパターン。ms単位でカンマつなぎの数字で指定

そこで、まずDeviceConnectのURLを生成するクラスを呼び出します。

var builder = new dConnect.URIBuilder();

/gotapi/vibration/vibratevibration に当たる部分をプロファイルとして指定します。

builder.setProfile("vibration");

さらに /gotapi/vibration/vibratevibrate を要素として指定します。

builder.setAttribute('vibrate');

何のデバイスを動かすかですが、今回はスマートフォン自身(Host)を動かします。デバイス一覧の中から探すのですが、後でも使うので関数化しておきます。 findService はロジックの中にすでに定義してあります。

/////////////////////////////
// 記述済みです
/////////////////////////////
// サービスを見つける処理
findService: function(name) {
  for (i in this.__services) {
    if (this.__services[i].id.toLowerCase().indexOf(name.toLowerCase()) == 0) {
      return this.__services[i].id;
    }
  }
},

使い方は次のようになります。

var service = this.findService("host");
builder.setServiceId(service);

さらにアクセストークンも指定します。

builder.setAccessToken(this.__accessToken);

そしてパラメータを指定します。指定できるパラメータは dConnect.constants.vibration の中に定義されています。今回は振動パターンを指定します。

builder.addParameter(dConnect.constants.vibration.PARAM_PATTERN, "1000,2000");

ここまで終わったらURLを生成します。

var uri = builder.build();

そして実行します。 put メソッドを使うことでPUTを実行します。

dConnect.put(uri, null, null, function(json) {
  dfd.resolve("処理成功しました");
}, function(errorCode, errorMessage) {
  dfd.reject({
    errorCode: errorCode,
    errorMessage: errorMessage
  });
});

ここまで流れをまとめると次のようになります。

// バイブレーション
vibrate: function() {
  var dfd = this.deferred();
  var service = this.findService("host");
  var builder = new dConnect.URIBuilder();
  builder.setProfile("vibration");
  builder.setAttribute('vibrate');
  builder.setServiceId(service);
  builder.setAccessToken(this.__accessToken);
  builder.addParameter(dConnect.constants.vibration.PARAM_PATTERN, "1000,2000");
  var uri = builder.build();
  dConnect.put(uri, null, null, (json) => {
    dfd.resolve("処理成功しました");
  }, (errorCode, errorMessage) => {
    dfd.reject({
      errorCode: errorCode,
      errorMessage: errorMessage
    });
  });
  return dfd.promise();
},

Web APIの内容と見比べて近いのが分かってもらえるでしょうか。

PUT (dConnectのメソッド) /gotapi/ vibration (setProfileで指定)/vibrate (setAttributeで指定)

パラメータも、サービスIDとアクセストークンは特別なメソッドが用意されており、それ以外は addParameter で指定するだけです。

キー メソッド 説明
serviceId setServiceId サービスID
accessToken setAccessToken アクセストークン
pattern addParameter バイブレーションのパターン。ms単位でカンマつなぎの数字で指定

処理が正しくできていれば、ボタンを押すとバイブレーションが実行されます。パターンの文字列を変えれば振動するパターンが変更できるはずです。お試しください。

今回のコードは deviceconnect-handson/5 at master · hifivemania/deviceconnect-handson にて確認できます。また、実際に動いているデモはこちらのURLにて確認できます。

次はライトのオン/オフを実行します