バイブレーション機能に限りませんが、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/vibrate
の vibration
に当たる部分をプロファイルとして指定します。
builder.setProfile("vibration");
さらに /gotapi/vibration/vibrate
の vibrate
を要素として指定します。
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にて確認できます。