Google+ もご覧ください
ユーザーアイコン

Ti Weekly Clips++

Titanium SDK 3.3RCがリリース!&Titanium周りで知っておきたいニュースいろいろ

Donayama

Titanium SDK 3.3RCがリリース!&Titanium周りで知っておきたいニュースいろいろ

News - SDKアップデートやイベントなどのニュース

Announcing the 3.3.0 Release Candidate of Titanium SDK and Studio

Titanium SDKならびにStudioの3.3.0のリリース候補版が公開されました。

3.2.xからの更新点については以前のClipsにてまとめていますので、そちらをご覧ください。リリースノートはこちら

βからの更新点については大きなところでいうと、次の3点でしょうか。

  • Androidのモジュール作成とパッケージングの不具合解決
  • Alloyでテーマを使っているときにナビゲーションがおかしくなる問題の解決
  • Core Motionモジュールが追加されました。ドキュメントはこちら

おそらく今月中には3.3がリリースされます。 Ti.includeの撤廃など、Ti.Nextに向けた動きが加速していくのは間違いないので、既存アプリの維持などには十分注意を払う必要がありそうです。

Appcelerator Platform Becomes Citrix Ready Verified and Ready for Business

Appcelerator Platform向けということではありますが、CitrixのWorxに対応するアプリを作れるようになるようです。そういった要件があるようであれば。

■勉強会リマインダー

Titaniumもくもく会 #19 - Titanium | Doorkeeper

6月26日木曜日に大江戸線勝どき駅の株式会社うるるさんのセミナールームにて開催されます。

先端技塾シリーズ JavaScriptでiPhoneアプリ開発をマスターしよう!

@h5y1m141こと小山田浩さんによる有償のセミナーが2014年7月8日から毎週火曜日に4回にわたって開催されます。 ご興味のある方は是非。

東京Node学園 13時限目 - connpass

6月23日にあるNode.js勉強会のLTにて、Titaniumユーザ会会長の@yagi_さんが「Node.jsが使えるホスティング環境としても利用可能なBaaS、Appcelerator Cloud ServicesとJavaScriptでネイティブアプリを作成できるTitanium」と題した発表をされるそうです。

Tips & Topics - ノウハウや技術紹介、解説記事

Titanium ユーザーが Swift を触ってみたら

@ryugoo_さんによるSwift触ってみたレビュースライド。

Appcelerator Tutorial: Install Modules globally for Titanium Studio

Titanium Studioからネイティブモジュールをインストールする方法について画像を交えた解説をした記事。

The Titan Program | TiDev

Titan Programって何?っていうことをまとめた記事です。

かつては私もそうだったのですが、色々サボっていたため外れてしまっています(^^;

Titanとして活動したいよ!って向きはお近くのTitanな人に相談してみるといいようですよ。 (日本だと@kaz_konnoさんと@k0sukeyさんだけなのですが)

GitHub Watch - モジュールやサンプルコードの情報

dbankier/RealSwitch

のようなスイッチを実現するためのAndroidネイティブモジュール。

これをAlloyで既存のSwitchと置き換えて使うためのコードパッチ)もあります。

k0sukey/TiBubbleView

チャットアプリにマッチしそうなiOSネイティブモジュール。

core/demo_app/examples/viewNavigation at master · rblalock/core

Appceleratorのblog記事How to Build Great Cross-platform Apps with Appcelerator: A Case Studyにて紹介されているアプリ Nowで使用されているNavigation管理のCommonJSモジュール。

こういう動きをさせたいという需要も多そうなNow自体のソースも見たいところなんですけどね(^^;

mikefogg/BarcodeView

ZBar bar code readerを使用したバーコード読み取りをするためのiOSネイティブモジュール。

Spotlight - 小さな特集記事

今回の特集ではTitanium SDK 3.3.0から追加されるCoreMotionモジュールのドキュメントリファレンスからActivityとStep Counterにフォーカスをあてて、ざっくり訳をお送りしたいと思います。

CoreMotionモジュール自体はiOSデバイスに搭載されている加速度センサ・ジャイロスコープ・磁力計などの ハードウェアセンサを利用するためのものです。

注意点としていくつかあります。

  • このモジュールはiOS 7上でのみ動作します。
  • すべてのデバイスに同じセンサが搭載されているわけではないので、これらの機能を利用するには対象となるデバイスで使用できるかどうかAPIを使用して確認するようにする必要があります。
  • センサのテストはデバイス上でしかできません。シミュレータ上では動作しない点、注意してください。
  • また、いくつかの機能は設定(プライバシー>モーションアクティビティ)を必要とします。アプリケーションがCoreMotion APIを最初に使用するときに、iOSが許可を求めてきます。

今回は加速度センサ・ジャイロスコープ・磁力計に関する部分は割愛し、次の機能について説明します。

  • Activity
    • 利用者がどのような状態でデバイスを使用しているか(歩行中か、自動車移動中か…など)
  • Step Counter
    • 利用者がデバイスを所持して移動した歩数を取得する

標準のAPIとは別に準備されているモジュールなので、まずモジュールを使う準備をしましょう。

Titanium StudioではHelpメニュー>"Install Mobile Module..."から、 もしくはtiapp.xmlmodule要素でti.coremotionを指定します。

<modules>
    <module platform="iphone">ti.coremotion</module>
</modules>

これで準備OKなのですが、注意点で挙げたようにセンサの利用可否をAPI(以下のではCoreMotion.isStepCountingAvailable())を通して確認してから、目的の機能を使うようにしましょう。

var CoreMotion = require('ti.coremotion');
if (CoreMotion.isStepCountingAvailable()) {
    CoreMotion.startStepCountingUpdates({stepCounts: 1}, function(e){
        step_label.text = e.numberOfSteps;
        Ti.API.info(JSON.stringify(e));
    });
} else {
    Ti.API.warn('このデバイスでは歩数計はサポートされていません。');
}

Activity

Activity APIは利用者の行動(活動)を判別して、ログに保持するものです。

queryActivityメソッドを利用することで指定した期間の行動ログを取得できます。

  • 第一引数に{start: startDateObj, end: endDateObj}の形式で対象範囲を指定します。
  • 第二引数は応答に対するコールバック関数を指定します。仮引数としてCoreMotionActivityQueryDataWithSuccessが返されるので、このactivitiesプロパティの配列を使用する形となります。

結果として返されるActivityオブジェクトには次のようなプロパティが存在します。

  • 状態をbooleanで表すプロパティ(いずれかがtrue)
    • automotive: 自動車移動しているか否か
    • running: 走っているか否か
    • walking: 歩行中か否か
    • stationary: 静止しているか否か
    • unknown:判別不能な活動をしているか否か
  • 状態判別の信頼度を表すプロパティcondifence
    • <CoreMotion>.MOTION_ACTIVITY_CONFIDENCE_LOW
    • <CoreMotion>.MOTION_ACTIVITY_CONFIDENCE_MEDIUM
    • <CoreMotion>.MOTION_ACTIVITY_CONFIDENCE_HIGH
  • 活動開始日時を表すプロパティ startDate

それでは例として、行動ログをリスト表示するAlloyアプリを作ってみましょう。

Activityの変化イベントを取得し、その都度信頼度がMOTION_ACTIVITY_CONFIDENCE_LOWではないことを確認します。 確認後、リストに追加していくという流れになっています。

app/views/index.xml

<Alloy>
    <Collection src="activities"/>
    <Window class="container">
        <ListView top="25">
            <ListSection dataCollection="activities">
                <ListItem title="{activity}"
                    subtitle="{timestamp}"
                    template="Ti.UI.LIST_ITEM_TEMPLATE_SUBTITLE" />
            </ListSection>
        </ListView>
    </Window>
</Alloy>

app/controllers/index.js

var activities = Alloy.Collections.activities;
var model = Backbone.Model.extend();
var CoreMotion = require('ti.coremotion');
var last_activity = "unknown";

CoreMotion.startActivityUpdates(updateActivity);

function updateActivity(e) {
    var data = e.activity;
    var dict = {};
    // 信頼度が中もしくは高のときにデータを取得する。
    if (data.confidence != CoreMotion.MOTION_ACTIVITY_CONFIDENCE_LOW) {
        dict.timestamp = data.startDate;
        if (data.automotive) {
            dict.activity = "automotive";
        }
        else if (data.running) {
            dict.activity = "running";
        }
        else if (data.stationary) {
            dict.activity = "stationary";
        }
        else if (data.walking) {
            dict.activity = "walking";
        }
        else {
            return;
        }

        if (dict.activity == last_activity) {
            return;
        } else {
            activities.add(new model(dict));
            last_activity = dict.activity;
        }
    }
}

$.index.open();

app/models/activities.js

exports.definition = {
    config: {
        adapter: {
            type: "properties",
            collection_name: "activities"
        }
    }
};

Step Counter

Step Counter APIはデバイスを所持した状態で移動した歩数記録を取得するためのものです。

queryStepCountメソッドは指定期間内の歩数を取得するためのものです。 * 第一引数に{start: startDateObj, end: endDateObj}の形式で対象範囲を指定します。 * 第二引数は応答に対するコールバック関数を指定します。仮引数としてCoreMotionStepCountingQueryDataWithSuccessが返されるので、このnumberOfStepsプロパティの値を使用する形となります。

startStepCountingUpdatesメソッドは第一引数にセットされるstepCountsの歩数ごとに第二引数のコールバック関数が呼び出されるというものです。監視を停止するためにはstopStepCountingUpdates()メソッドを利用します。

例として、アプリ起動後からの歩数表示をするとともに、ボタンをタップすると最後の1分間で歩いた歩数を表示するというシンプルなコードを挙げます。

var CoreMotion = require('ti.coremotion');

var win = Ti.UI.createWindow({backgroundColor: 'white', layout: 'vertical'});

var step_label = Ti.UI.createLabel({text: "0", top: 25});
win.add(step_label);

var step_history_label = Ti.UI.createLabel({text: "ボタンを押すと歩行記録が表示されます。", top: 25});
win.add(step_history_label);

if (CoreMotion.isStepCountingAvailable()) {
    CoreMotion.startStepCountingUpdates({stepCounts: 1}, function(e){
        step_label.text = e.numberOfSteps;
    });
}

var button = Ti.UI.createButton({title: "Last Minute", top: 25});
button.addEventListener('click', function(e){
    CoreMotion.queryStepCount({
        start: new Date(new Date().getTime() - 60*1000),
        end: new Date()
    }, function (e) {
            step_history_label.text = "You walked " + e.numberOfSteps + " steps in the last minute.";
        }
    );
});
win.add(button);

win.open();

歩数表示をするアプリは乱立しておりますが、このように非常に分かりやすいインターフェイスでAPIとして3.3.0から提供される形となります。 今後はライフログも絡めたようなアプリを自前で実装する際にもTitanium単体として実現できるのではないでしょうか。

Tiweeklyclips
タグ:

記事をリクエストする

関連記事

コメント