機種ごとに色々分けて実装したい場合に、その機種を判別する方法についての覚書。
フォーラムを検索したら次のような話題があった。
Is there way to detect watch model? - Discussion - Connect IQ - Garmin Forums
A dedicated community for Garmin users to ask questions, provide answers, and share feedback.
内容としては、2種類あるとのこと。
- 機種名を返すリソースを機種ごとに分けてリソースを追加しておく。
- System::DeviceSettingsで情報を取得し、形状・幅・高さなどから類推する。
2番目の方法は、同じ形状、同じサイズなのに、フォントの大きさなどが違う場合があるので、あまり使えない方法だと思う。
1番目の方法をベースに実装した場合、次のようになる。
まず、機種ごとにリソースフォルダを作成し、その下に機種名を文字列化したリソースファイルを定義する。ファイル名は何でもいいのだけど、わかりやすいようにdevice.xmlとしておいた。
ここでは、Forerunner45、vivoactive 4、vivoactive HR用を用意している。
device.xml内に機種名を入れる。内容は次のようなものになる。
この例は、vivoactive 4用のもの。
<resources>
<strings>
<string id="DeviceModel">vivoactive4</string>
</strings>
</resources>
このリソースを使う個所は、ウォッチフェイス用のオブジェクトを生成する部分。
AppBase内のgetInitialView()で使う。
function getInitialView() {
var model = WatchUi.loadResource(Rez.Strings.DeviceModel);
System.println(model);
switch(model) {
case "vivoactive_hr":
return [ new DigitalHRJView() ];
break;
case "fr45":
return [ new Digital45View() ];
break;
case "vivoactive4":
return [ new Digital45View() ];
break;
}
}
ここでは、機種ごとに生成するオブジェクトを変えた方法を使用しているが、生成時の初期値として機種情報を渡すようにするのもいいかもしれない。
コメント