Adobe
製品
Creative Suiteファミリー
Photoshopファミリー
Acrobatファミリー
Flash Platform
Digital Marketing Suite
Digital Enterprise Platform
Digital Publishing Suite
その他の製品一覧
ソリューション
コンテンツオーサリング
教育
金融機関
デジタルマーケティングソリューション
その他のソリューション
ラーニング サポート ダウンロード 会社情報
ご購入
アドビストア安心のサポート& サービス
アカデミック版のご購入学生、教職員、個人
ライセンスのご購入企業、教育機関、官公庁
販売パートナー
検索
 
情報 サインイン
ようこそ、 カート 注文状況 ユーザー登録
マイアカウント
サインアウト
サインインの目的 お客様のアカウントや体験版ダウンロード、製品の拡張機能、コミュニティエリアへのアクセスなどを管理するため
Adobe
製品 セクション   検索  
ソリューション 会社情報
サポート ラーニング
サインイン ようこそ、 注文状況 ユーザー登録
Qty:
Subtotal
Checkout
Adobe Developer Connection / Adobe AIRデベロッパーセンター /

デバイス連動 AIR アプリケーション開発手法

著者 廣畑 大雅 (taiga)氏

廣畑 大雅 (taiga)氏
  • taiga.jp

作成日

28 August 2008

ページ ツール

Facebookでシェア
Twitterでツイート
LinkedInでシェア
ブックマーク
印刷

Tags

必要条件

ユーザーレベル

すべて

はじめに

この記事の発端は、 2008 年に行われた第 1 回 Adobe AIR コンテストに著者がエントリーした AIR アプリケーション『 AIR ThermoHygrometer 』です。

コンテスト終了後日、Flex User Group の勉強会で開発手法を紹介した縁で、本記事を公開するに至ります。

開発環境

  • Adobe Flex Builder 3 Professional
  • Adobe AIR 1.1
  • Microsoft Visual C# 2008 Express Edition (無償版)
  • Microsoft Windows 2000/XP(デバイスの動作条件)

AIR ThermoHygrometer の紹介

開発手法を解説する前に、AIR ThermoHygrometer の紹介をします。AIR ThermoHygrometer は、Adobe Flex Builder 3 Professional を使って開発した、温湿度計デバイス連動 AIR アプリケーションです。1 秒ごとに温度と湿度を計測し、Flex 3 の AreaChart コンポーネントを用いて、リアルタイムに描画更新される「過去 60 秒間の温度と湿度の推移グラフ」を作成します。

図1. AIR ThermoHygrometer
図1. AIR ThermoHygrometer

使用デバイス

AIR ThermoHygrometer は、ストロベリーリナックス社の『 USB 温度・湿度計モジュール』を使用しています。プラグアンドプレイで動作するので、ドライバのインストールなどは一切不要で、USB ポートに接続したらすぐ使用できるというお手軽デバイスです。

図2. USB 温度・湿度計モジュール
図2. USB 温度・湿度計モジュール

AIR アプリケーション (SWF) とデバイス間の通信方式を選定する

AIR アプリケーション (SWF) とデバイス間は直接通信できないので、間を取り持つブリッジアプリケーションを開発する必要があります。ブリッジアプリケーションを開発するにあたり、いくつかの手段の中から通信方式を選択することができます。

ソケットを用いたり、LocalConnection を直接ハックしたりと、さまざまな実現方法がありますが、「工期を短くする」「アプリケーションの配布を容易にする」などの事柄を踏まえて、AIR ThermoHygrometer では「 Visual C# のShockwaveFlashObject に SWF を読み込ませて、AIR アプリケーション (SWF) とLocalConnection で通信させる」という方法を採用しました。

図3. AIR ThermoHygrometer のアーキテクチャ
図3. AIR ThermoHygrometer のアーキテクチャ

ここで肝になるのが、LocalConnecton と ExternalInterfaceProxy です。それぞれについて、押さえるべきポイントを説明します。

LocalConnection 使用上の注意

AIR アプリケーション (SWF) と AIR アプリケーション以外の SWF 間をLocalConnection で通信させる場合には、LocalConnection.connect() メソッドや、LocalConnection.send() メソッドで使用する connectionName パラメータに対して、以下の注意が必要です。

■ AIR → SWF の場合

AIR (送信側)の connectionName パラメータ

localhost:connectionName

注意: connectionName は任意の接続名です。

例: AIR (送信側)の ActionScript

const SENDER_NAME:String = "localhost:ThermoHygrometer"; var senderLC:LocalConnection = new LocalConnection(); var functionName:String = "getData"; var appID:String = nativeApplication.applicationID; var pubID:String = nativeApplication.publisherID; senderLC.send(SENDER_NAME, functionName, appID, pubID);

相互通信する場合、AIR アプリケーションは通信先の SWF に、自身の applicationID と publisherIDを渡す必要があります。(詳しい説明は後述します)

SWF (受信側)の connectionName パラメータ

connectionName

注意:connectionNameは任意の接続名です。

例: SWF (受信側)の ActionScript

const RECEIVER_NAME:String = " ThermoHygrometer"; var recieveLC:LocalConnection = new LocalConnection(); recieveLC.allowDomain('*'); try { recieveLC.connect(RECEIVER_NAME); } catch (error:ArgumentError) { //TODO:任意のエラー処理 }

■ SWF → AIR の場合

SWF (送信側)の connectionName パラメータ( AIR アプリケーションをインストールして実行する場合)

app#applicationID.publisherID:connectionName

SWF (送信側)の connectionName パラメータ(開発ツールなどを使用して実行する場合)

app#applicationID:connectionName

注意:applicationID と publisherID は、事前に AIR アプリケーションから受け取る必要があります。
AIR アプリケーションを ADL(AIR Debug Launcher) または Flash CS3、Flex Builder、Dreamweaver などの開発ツールなどを使用して実行する場合、publisherID は null になり、ドメインストリングから省く必要があります。AIR アプリケーションをインストールして実行する場合は、publisherID をドメインストリングに含めます。 connectionName は任意の接続名です。

例:AIR から LocalConnection 経由で呼び出される SWF 内の関数

//AIR に接続するとき使用する LocalConnection の connectionName private var _senderName:String; //AIR から LocalConnection 経由で呼び出される関数 public function getData(...args):void { var appID:String = args[0]; var pubID:String = args[1]; _senderName = "app#" + appID; //開発ツールなどを使用して実行する場合の対策 if(null != pubID && 0 < pubID.length) { _senderName += "." + pubID; } _senderName += ":ThermoHygrometer"; }

AIR (受信側)の connectionName パラメータ

connectionName

注意: connectionName は任意の接続名です。

例: AIR (受信側)の ActionScript

const RECEIVER_NAME:String = "ThermoHygrometer"; var recieveLC:LocalConnection = new LocalConnection(); recieveLC.allowDomain('*'); try { recieveLC.connect(RECEIVER_NAME); } catch (error:ArgumentError) { //TODO: 任意のエラー処理 }

AIR で使用する LocalConnection についての詳しい説明は、『アプリケーション間通信』を参照してください。

ExternalInterfaceProxy の使用

Visual C# アプリケーションの ShockwaveFlashObject で読み込む SWF と Visual C# アプリケーションとを通信させるためには、ExternalInterfaceProxy を使用します。( ActionScript から Visual C# の関数を呼び出すには、ExternalInterface クラスを使用します。)

ExternalInterfaceProxy は、『 Adobe Flash サンプル』で配布されている C# のクラスライブラリです。各クラスの詳しい説明は、『例 : ActiveX コンテナに対する External API の使用』を参照してください。

例: Visual C# のソース

using Flash.External; ... private ExternalInterfaceProxy proxy; private AxShockwaveFlashObjects.AxShockwaveFlash IntrovertSWF; ... proxy = new ExternalInterfaceProxy(IntrovertSWF); proxy.ExternalInterfaceCall += new ExternalInterfaceCallEventHandler(proxy_ExternalInterfaceCall); ... private object proxy_ExternalInterfaceCall(object sender, ExternalInterfaceCallEventArgs e) { switch (e.FunctionCall.FunctionName) { // SWF から実行される関数名を判別 … case "newTempHumid": getTempHumidTrue(); return null; } } private void getTempHumidTrue() { double j = 0; double k = 0; … proxy.Call(“newTempHumid”, j, k); //SWF から登録されているコールバック関数の実行 }

例: Visual C# の関数を呼び出している ActionScript

if (ExternalInterface.available) { … //コールバック関数の登録 ExternalInterface.addCallback("newTempHumid", newTempHumidHandler); } … public function getTempHumidTrue():void { //Visual C# アプリケーションの関数呼び出し ExternalInterface.call("newTempHumid"); } … private function newTempHumidHandler(...args):void { //Visual C# アプリケーションの ExternalInterfaceProxy.Call() から実行されるコールバック関数 … }

LocalConnecton と ExternalInterfaceProxy が導通できれば、あとはデバイスにアクセスするのみです。(デバイスにアクセスすることについては、完全に C# の話になってしまうため割愛します。)

最後に

今回紹介した内容は、デバイス連携 AIR アプリケーション開発手法としては、かなりトリッキーかつマニアックな部類に該当すると思いますが、大部分を Adobe が公開しているサンプルソースに頼ることができるので、ある程度のプログラミングスキルがあれば、割と容易に手を出せるのではないかと思います。

Tutorials and samples

Tutorials

  • Introducing Adobe AIR Launchpad
  • Licensing Adobe AIR applications on Android
  • Developing native extensions for Adobe AIR
  • Uploading images from CameraRoll and CameraUI

Samples

  • Licensing Adobe AIR applications on Android
  • Using web fonts with Adobe AIR 2.5
  • Using Badger for Adobe AIR applications

AIR blogs

More
02/02/2012 AIRKinect Extension is a Native Extension for use with Adobe AIR...
02/01/2012 Microsoft Kinect and Adobe AIR
02/01/2012 New Adobe Flash Player 11.2 beta for Desktops and Adobe AIR 3.2 beta
01/30/2012 Using charts inside Mobile Applications with Adobe AIR

AIR Cookbooks

More
01/20/2012 Skinnable Transform Tool
01/18/2012 Recording webcam video & audio in a flv file on local drive
12/12/2011 Date calculations using 'out-of-the-box' functions
11/29/2011 Button compatibility with NativeComboBox

製品

  • Creative Suiteファミリー
  • Photoshopファミリー
  • Acrobatファミリー
  • Flashプラットフォーム
  • Digital Marketing Suite
  • Digital Enterprise Suite
  • Digital Publishing Suite
  • モバイルアプリ

ソリューション

  • カスタマーエクスペリエンスマネジメント
  • コンテンツオーサリング
  • デジタルマーケティング

業種別ソリューション

  • 教育
  • 金融機関

サポート

  • ヘルプ&サポート
  • 注文と返品
  • ダウンロードに関するヘルプ
  • ユーザー登録に関するヘルプ

ラーニング

  • ADC: Adobe Developer Center
  • Adobe TV
  • Design Magazine
  • Photoshop Magazine
  • Focus In

ご購入方法

  • アドビストア
  • アカデミック版のご購入
  • ライセンスのご購入

ダウンロード

  • Adobe Reader
  • Adobe Flash Player
  • Adobe AIR
  • Adobe Shockwave Player

会社情報

  • プレスルーム
  • パートナープログラム
  • 企業の社会的責任(英語)
  • 採用情報
  • 投資家の皆様へ(英語)
  • イベント&セミナー
  • Legal(英語)
  • お問い合わせ
国・地域および言語の選択 日本(変更)
国・地域および言語の選択 閉じる

North America

Europe, Middle East and Africa

Asia Pacific

  • Canada - English
  • Canada - Français
  • Latinoamérica
  • México
  • United States

South America

  • Brasil
  • Africa - English
  • Belgium - English
  • Belgique - Français
  • België - Nederlands
  • България
  • Česká republika
  • Danmark
  • Eastern Europe - English
  • Eesti
  • España
  • France
  • Deutschland
  • Hrvatska
  • Ireland
  • Israel - English
  • Italia
  • Latvija
  • Lietuva
  • Luxembourg - Deutsch
  • Luxembourg - English
  • Luxembourg - Français
  • Magyarország
  • Middle East and North Africa - English
  • Moyen-Orient et Afrique du Nord - Français
  • Nederland
  • Norge
  • Österreich - Deutsch
  • Polska
  • Portugal
  • România
  • Россия
  • Schweiz - Deutsch
  • Suisse - Français
  • Svizzera - Italiano
  • Slovenija
  • Slovensko
  • Srbija
  • Suomi
  • Sverige
  • Türkiye
  • Україна
  • United Kingdom
  • Australia
  • 中国
  • 中國香港特別行政區
  • Hong Kong S.A.R. of China
  • India - English
  • 日本
  • 한국
  • New Zealand
  • Pacific - English
  • 台灣

Southeast Asia

  • Includes Indonesia, Malaysia, Philippines, Singapore, Thailand, and Vietnam - English

Copyright © 2012 Adobe Systems Incorporated. All rights reserved.

当Webサイトをご利用のお客様は、利用条件およびプライバシーポリシー(2011年9月30日更新)にご同意いただいたものとみなされます。

Reviewed by TRUSTe: site privacy statement