|
| |
■ezplusとは●端末の情報■開発方法●KJX作成ツール■ezplus 独自の機能
●チェックサム
●ダウンロードサイト作成▼HDML&CGI
▼XHTML Basic●位置情報■ezplusフェーズ2独自の機能
●メディアプレイヤー
●Cメール通信
●バイブレータ・LED
●データフォルダ●HTTP通信■リンク集
●URL to
●データフォルダ
●Mail to
●Phone to
ezplusとはau(KDDI)の携帯電話で採用されているJava仕様です。MIDPに携帯電話の機能(バイブレータ、音環境)を提供するKDDI独自のパッケージ「KDDI-P」が追加されています。
ezplusには2001/12/1現在、大きく分けて2つのフェーズに分かれます。
・フェーズ1
KJXファイルで50Kバイト。位置情報(基地局単位)収得可能。HTTP通信ができない。C451H、C452CAの2機種のみ。256色PNGのみ使用可能。・フェーズ2
フェーズ1の機能はそのままで新たに、HTTP通信可能、gpsOneを使った位置情報収得可能、ezplusからのPhone to、URL to、Mail toが可能。フルカラーPNG使用可能。
●端末の情報
基本的な情報と端末ごとのクセなどを紹介します。・基本
端末名 端末識別 画面サイズ 全角フォント(L/M/S) 色数 その他 C451H HI14 120x113 14x16/14x16/12x13 256 C452CA CA14 120x120 *1 14x14/12x12/12x12 256 C5001T TS21 144x135 14x15/14x15/14x15 4096 gpsOne C3001H HI21 120x130 14x16/14x16/12x13 4096 gpsOne C3002K KC21 128x132 12x12/12x12/12x12 65536 gpsOne C3003P MA21 132x144 20x23/12x15/10x13 65536 gpsOne A3011SA SA21 132x144 16x16/12x12/10x10 65536 gpsOne A3012CA CA21 132x147 14x14/12x12/10x10 65536(jpeg表示のみ26万) カメラ付き,gpsOne A3013T TS22 144x135 14x15/14x15/14x15 65536 gpsOne A3014S SN21 120x120 14x14/14x14/12x12 65536 ジョグ,gpsOne A3015SA SA22 132x144 16x16/12x12/10x10 26万 gpsOne A5301T TS23 144x140 18x19/14x15/12x14 26万 カメラ,SDカード,gpsOne,pmd非対応 A5303H HI23 132x144 14x16/12x13/12x13 26万 カメラ,gpsOne,pmd非対応 情報提供:バーニィさん、こちさん。どうもありがとうございます。
*1:C452CAでの画面サイズはCanvas#getHeight()の値で120が得られますが、通常起動時には109までしか表示されていません。
これはezplusボタンを押す事で下の画像のように3種類の画面構成になることで120まで表示できるようになります。![]()
ezplusを個人で開発・配布するには少々複雑な環境が必要です。具体的にはダウンロード用のCGIサーバー環境と、EZwebのHDMLに対応している(対応することができる)サーバーです。
これはフェーズ1対応のezplusを作成する場合は必須となります。フェーズ2ではXHTMLを利用し、HDML・CGIを利用することなくダウンロードできる仕組みが用意されています、が、その仕組みでezplusをダウンロードする方法がまだ私には分かりません。(--;;
幸いフェーズ1の方法がそのまま利用可能なのでフェーズ1の方法をご紹介します。XHTMLを使ったezplusダウンロード方法はないようです。
●KJX作成ツールezplusを作成する場合にはEZwebの公式情報サイト「EZweb on the street」の技術情報>ezplus>KJX作成ツールを使います。
EZweb on the streetは2002/4/1から au のサイトとツーカーのサイトに分かれました。ezplusについては au のサイトに移行しました。
・KJX作成ツール(kjx_tool_ver2_0.exe)
http://www.au.kddi.com/ezfactory/tec/spec/ezplus2.htmlまた、KJX作成ツールを利用するにはJDK1.3とJ2ME Wireless Toolkit 1.0.3(以前の物でも可)が必要となりますので予めダウンロード&インストールしてください。
以下、自己解凍形式のkjx_tool_ver2_0.exeを実行することでできる「KJX_tool_kit_Ver2_0」フォルダを「ezplus」と名前を変え、Cドライブのルート(C:\ezplus)に移した場合の説明となります。
・設定
C:\ezplus\Tools\Dir2\CmdTool.jarをダブルクリックすることで「Micro JBlend cmdtool」が立ち上がります。立ち上がらない場合は同じフォルダ内にある「CmdTool.bat」をJDK1.3がインストールされているパスに変えて実行してください。それでも立ち上がらない場合はJDK1.3のインストールが正常にされなかった可能性があります。![]()
正常に立ち上がった場合はデフォルトの設定をします。「tool>default env...」で以下のようなダイアログが開きます。この中の「build」と「MIDlet」を設定します。
なお、ダイアログ内に表記されている「%PROJ%」には後に設定する各プロジェクトのプロジェクト名が、「%PROJDIR%」にはプロジェクトを作成したフォルダまでのパスが、プロジェクトを作成した時に自動的に設定されます。
![]()
・buildの設定
buildではビルド時に使用するjavac.exeやjar.exe、そしてJADファイルとJARファイルをKJXファイルへ変換するKJXArchiverを設定します。「javac path、jar path、preverify path」はそれぞれJDK1.3とJ2ME Wireless Toolkitをインストールした場所を設定してください。
「other after process path」には「c:\java_dev」とされている個所を「c:\ezplus\Tools\Dir1」(Dir2ではなくDir1であることに注意)と書き換えてください。
「class path」もJ2ME Wireless Toolkitがインストールされている場所と、c:\java_devをc:\ezplus\Tools\Dir1に変更してください。・MIDletの設定
MIDletではJADファイル内に記述する内容を設定します。設定個所は「MIDlet-Jar-Vendor」と「MicroEdition-Profile」です。
MIDlet-Jar-Vendorには通常使う製作者名を、MicroEdition-Profileにはフェーズ1対応の場合は「KDDIP-1.0」を、フェーズ2専用の場合には「KDDIP-2.0」を指定します。
・プロジェクトの作成
新規プロジェクトとしてHelloWorldを作成するには「file>new project」を選択し、表示されるダイアログのProject NameにHelloWorldを設定します。
Project Detailにはプロジェクトの説明を書きますが、空白のままでも大丈夫です。プロジェクトを作成することで、c:\ezplus\Tools\Dir1\project\HelloWorldが作成されたのを確認してください。
また、HelloWorldの中に「src、bin、res」が作成されているのも確認してください。以降ではsrcフォルダにJavaのソースファイル(*.java)を、resフォルダにアプリケーションで使用するリソースファイル(画像や音など)を入れ、ツールの「buildボタン」を押す事でbinフォルダにKJXファイルなどが作成されるようになります。
・ソース記述
メモ帳などで以下のようなソースを記述し、HelloWorld.javaとしてsrcフォルダへ保存します。
// HelloWorld.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class HelloWorld extends MIDlet implements CommandListener { Command exitCommand; Display display; public HelloWorld() { display = Display.getDisplay(this); exitCommand = new Command("Exit",Command.SCREEN,2); } public void startApp() { TextBox textbox = new TextBox("HelloWorld","Hello World!",256,0); textbox.addCommand(exitCommand); textbox.setCommandListener(this); display.setCurrent(textbox); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command,Displayable screen) { if(command==exitCommand) { destroyApp(false); notifyDestroyed(); } } }・ビルド
「buildボタン」を押す事でコンパイル>事前検証>JAR化>JAD作成>KJX作成までやってくれます。(^^;;binフォルダにHelloWorld.kjxが作成されているのを確認してください。
●チェックサム
EZwebからデータをダウンロードする際、転送データの正当性を確認するためにCRCチェックサムが実行されます。ezplusもこのチェックが必要になるのでツールを使って2バイトのチェックサムを付加します。ここでは私の用意したJavaアプリケーションのCRCチェックサム付加ツールを使います。
・CRCチェックサム付加ツール
http://www.sinsen.org/midp/ezplus/CRC.zipZIPファイルを解凍するとCRCフォルダが作成されます。これをc:\ezplusにコピーした状態(c:\ezplus\CRC)での使い方は以下のようになります。
java.exe -classpath c:\ezplus\CRC\CRC HelloWorld.kjx 実際に使う際にはバッチファイルを作成し、付加したいファイル(HelloWorld.kjx)の部分だけを書き換えるとと良いでしょう。
●ダウンロードサイト作成
ezplusを実機へ転送するにはEZweb上から作成したチェックサム済みのKJXファイルをダウンロードする必要があります。このダウンロードサイトを用意します。ダウンロードサイトにはフェーズ1の時はHDMLとCGIを利用しました。フェーズ2からはWAP2.0に対応したことでXHTML Basicによるダウンロードが可能になりました。
が、実はXHTML Basicによるezplusのダウンロード方法がまだ分かりません。(--;;
幸いフェーズ1の方法がフェーズ2でも利用可能なのでフェーズ1の方法をご紹介します。▼HDML&CGI
HDMLは「Handheld Device Markup Language」の略で携帯端末に適した記述が定義されています。ezplusのフェーズ1に対応した端末ではこのHDMLとCGIを使ってezplusをダウンロードします。HDMLで記述したサイトを公開するにはサーバーのMINE TYPE設定でHDMLが定義されている必要があります。もしHDMLをアップロードしたいサーバーがHDMLに対応していない場合は、「.haccess」を編集してHDMLファイルを使用可能にすることで解決できることもあります。「.haccess」が使えないサーバーの場合はご使用のサーバー管理者の方へご相談ください。
実際に端末とダウンロードのやり取りをするのはHDMLで指定されたCGIとなります。このCGIはEZwebホームページを作ろう!からダウンロードすることができます。
・ダウンロードCGI(Perl)
http://info.ezweb.ne.jp/factory/tec/dlcgi/download_1.htmlなお、ダウンロードCGIのPerlプログラム中、第1行目のPerlパスは各サーバー毎に設定する必要があります。詳しい情報は各サーバー管理者へお尋ね下さい。
・HDMLの記述
HDMLはHTML同様ただのテキストファイルなのでメモ帳などのテキストエディタで作成することができます。内容はと言えば、基本的にダウンロードCGIに付属されているHDMLファイルを編集する形で済みます。
下の例では、ダウンロードCGIを設置した場所を「http://cgi.sinsen.org/midp/ezplus/download.cgi」とし、CGIと同じ場所に配置したHelloWorld.kjxをダウンロードします。
<hdml version="3.0" markable="true">
<choice key="url" title="タイトル">
<action type="accept" task="gosub" dest="device:data/dnld?url=$url" label="OK">
<br>
<center>Download
<ce value="http://cgi.sinsen.org/midp/ezplus/download.cgi&name=HelloWorld.kjx&size=1411&disposition=devkdjx&title=HelloWorld">HelloWorld
</choice>
</hdml>
「name」にはKJXファイルのファイル名を、「size」にはチェックサムを付加したファイルサイズを、「disposition」にはezplus固定の「devkdjx」を、「title」には端末側で表示したい名前を設定します。
・アップロード
HDMLとダウンロードCGI、そしてチェックサム付加済みのKJXファイルをサーバーへアップロードします。HDMLとダウンロードCGIはアスキーモードで、KJXファイルはバイナリモードで転送してください。
CGIを動作させるのに属性変更が必要な場合は適切な属性に変更します。
・実機での動作テスト
実機でHDMLを配置したURLにアクセスし、HelloWorldを選択することで実機にezplusがダウンロードされます。ダウンロードしたezplusは各端末のデータフォルダへ保存され、端末のメニューから起動することができるようになります。以降の更新では、新たなKJXファイルの内容を追加、変更したHDMLファイルとチェックサム済みKJXファイルをアップロードするだけですみます。
ダウンロードに失敗する場合は「チェックサムが付加されているか」、「CGIが動作しているか」、「HDMLの情報に間違いがないか」確認してください。
また、EZwebでは最近訪れたページは端末にキャッシュされ、更新したつもりのHDMLファイルの内容が反映されていないことがあります。その場合は、端末のキャッシュをクリアするか、ページの再読み込みをすることで解決できます。
ezplusは通常のMIDP(フェーズ1はHTTP利用不可)に加えKDDI独自のAPI「KDDI-P」が用意されています。このAPIを使うことでezplus独自のアプリケーションが作成できます。上手く使えば非常に独創的なアプリケーションを作成することが可能です。
●位置情報
KDDI独自の機能といえば真っ先に出てくるのがこの位置情報システムです。現在一般の開発者に公開されている携帯Java環境でもこの位置情報を入手できる端末はほとんどありません。ただし、この位置情報システムで入手できる情報にはフェーズ1、フェーズ2によってのほか、端末によっても違いがあります。
フェーズ1では入手できる情報が約1Km四方の精度となります。これは主にアンテナの位置情報を元にしているからだと思われます。
フェーズ2ではgpsOneという仕組みを使い、平均8mという誤差で高い精度での計測ができます。
実際に位置情報を取得するプログラムは以下のようになります。
Location location = null; try{ location = Location.getLocation(); String ido = location.getLat(); String keido = location.getLon(); }catch(Exception e){ }2002/01/22:修正 C5001Tでは上のプログラムで常にGPSの精度が得られますが、C3001Hの場合、上のプログラムで得られる座標はフェーズ1と同様の基地局情報となります。C3002Kではどうなるか確認できていません。
C3001HでGPSの精度を手に入れるにはLocationクラスを継承したGpsLocationクラスを利用します。このクラスはKDDIから提供されているAPIドキュメントにも記載されていませんが、Locationクラスとほとんど同じ構造のため、LocationクラスをGpsLocationクラスに変えるだけで動作するようになります。
GpsLocation location = null; try{ location = GpsLocation.getLocation(); String ido = location.getLat(); String keido = location.getLon(); }catch(Exception e){ }通常はLocation#getLocation()が実行されることで位置情報使用確認のダイアログが表示されますが、フェーズ2でeznavigationの設定を確認不用にすることでダイアログは表示されますが、確認の入力が必要なくなります。
・測地系
端末で入手できる位置情報は測地系によって「tokyo」と「wgs84」と大きく2つに分かれます。「tokyo」とは主に日本で使われる測地系で、「wgs84」とはGPSで使われる測地系です。ezplusで入手できる測地系は基地局単位の場合「tokyo」で得られ、GPSの場合は「wgs84」となります。
困った事にこの2つの位置情報は異なるため、異なる測地系での計算がしたい場合は変換してやる必要があります。
相互変換には以下のページが参考になります。
http://member.nifty.ne.jp/Nowral/02_DATUM/02_DATUM.htmlこのページを参考にして作成したwgs84>tokyoの変換クラスは以下のようになります。
http://www.sinsen.org/midp/ezplus/ToTokyo.java
●メディアプレイヤー
ezplusでは再生可能リソースを扱う強力なシステムが構築されています。この機能を使うと、音を発するリソースに対して全く同じ扱いができるだけでなく、映像の要素を持ち合わせるリソースまでもをほとんど同じ方法で再生することが可能です。再生方法には大きく分けて2つの方法があります。バックグラウンド再生とフォアグラウンド再生です。
バックグラウンド再生では通常のBGM・効果音などを扱う場合と同様に音だけが再生されます。メディア再生中でもezplusの処理を並列して実行することができます。
フォアグラウンド再生では映像を伴うメディアの再生が可能です。メディア再生中はezplusの処理が停止されます。再生中に発生したイベント情報はメディアの再生が終了した時点でまとめて発信されるため注意が必要です。
2001/12/10現在対応しているメディアは以下の物があります。
C-MIDI(*.pmd)、SMAF(*.mmf)
バックグラウンド再生サンプル(JARリソース内のtest.pmdを再生)
MediaPlayerBox player = null; MediaResource resource = null; try{ resource = new MediaResource("resource://test.pmd"); player = new MediaPlayerBox(MediaPlayerBox.BACKGROUND); player.setResource(resource); }catch(Exception e){ } player.play();
●Cメール通信
ezplus対応端末とCメールによる通信をする、と言っても「メール」という形ではなく、プログラムによる端末間通信のことです。これによりチャットなどが簡単に作成できます。通信可能なのは以下のような条件を満たしている場合です。
・同じ名前
・同じベンダー
・同じバージョン相手が同じezplusを起動していない場合は相手側のアプリケーションを起動させます。この時Cメールによって起動したezplusではSystem#getProperty("kddi.system.wakeupMode")の値が1になります。
Cメールを送信する相手とその電話番号を入手するにはAddressBookを使います。
PersonalInfo info = AddressBook.getAddressByGUI();
String tellNumber = info.getTelNo();フェーズ2では以下のような方法が推奨されます。
String tellNumber = AddressBook.getTelNo(); 送信する場合は以下のようにします。
CMailConnection con = null; try{ con = (CMailConnection)Connector.open("cmail://"+tellNumber); con.setSingleMode(); con.setMessage("こんにちは。"); con.sendTo(); con.close(); }catch(Exception e){ }受信部分は以下のようになります。
CMailConnection con = null; try{ // Cメールが送られてくるのを待機 con = (CMailConnection)Connector.open("cmail://"); String message = con.getMessage(); con.close(); }catch(Exception e){ }
●バイブレータ・LED
ezplusではバイブレータ用のAPIが用意されているので、iアプリと違いバイブレータ機能のあるezplus端末であれば全て動作します。
また、iアプリでは一部の携帯しか対応していないかったLEDについても使用することができます。2001/12/18現在発売されているezplus対応機ではバックライトはキー操作がある限り点灯していますが、これも意図的に点灯させることができます。
// 10秒間バイブレータオン
PhoneSystem.onVibration(10000);
// 10秒間デフォルトカラーLEDオン
PhoneSystem.onIncallLed(PhoneSystem.COLOR_DEFAULT,10000);
// バックライトオン
PhoneSystem.onDisplayBacklight();PhoneSystemではその他、端末機種ID、電界強度、電池残量などを調べる事ができます。
// 端末ID String id = PhoneSystem.getID(); // 電界強度 String str = "電界:"; switch( PhoneSystem.getIntensity() ){ case PhoneSystem.NONE: s += "圏外"; break; case PhoneSystem.LOW: s += "弱"; break; case PhoneSystem.MIDDLE: s += "中"; break; case PhoneSystem.HIGH: s += "強"; break; case PhoneSystem.MAX: s += "最高"; break; } s += " 電源残量:"; switch( PhoneSystem.getPowerSupply() ){ case PhoneSystem.NONE: s += "無い?"; break; case PhoneSystem.LOW: s += "少"; break; case PhoneSystem.MIDDLE: s += "中"; break; case PhoneSystem.HIGH: s += "多"; break; case PhoneSystem.MAX: s += "満杯"; break; }
ezplusフェーズ2と呼ばれるバージョンからの新たな機能について紹介します。一部フェーズ1と重なる部分がありますが、フェーズ2で変更された部分などがあります。
●HTTP通信
言わずと知れたezplusフェーズ2の代表的機能です。MIDPの仕様には標準でHTTP通信がありましたが、ezplusではフェーズ2からこの機能に対応しました。ただし、接続可能なサーバーにezplus独自の制限があります。「JADに記載された3つまでのURLにしか接続できない」というものです。
実際のプログラムソースはMIDPのHTTP通信をご覧下さい。>MIDP-HTTP通信・CGIとの連携
JADに記載するのは以下のような物になります。
MIDlet-X-AllowURL-n: http://server/dir/
(例)
MIDlet-X-AllowURL-1: http://www.sinsen.org/midp/ezplus/
MIDlet-X-AllowURL-2: http://cgi.sinsen.org/cgi-bin/注意点は「MIDlet-X-AllowURL-n」と1〜3までの番号を付ける事、「MIDlet-X-AllowURL-1:(スペース)http://」とURLまでの間にスペースを入れる事、そしてURLの最後を「/」にすることです。
Micro JBlend cmdtoolを使う場合は任意のプロジェクトを開いた後で「project > edit env..」で開かれる以下のダイアログの「MIDlet > Other keyword」を実行します。
![]()
表示される以下のダイアログの上のテキストフィールドに「MIDlet-X-AllowURL-n: http://server/dir/」を入力し、「 add 」を押すと下のテキストボックスに登録されます。
![]()
あとは通常通りにビルドしてやればOKです。なお、HTTP通信可能なezplusを実行する際にはユーザー側にアプリケーション毎のHTTP通信の設定画面が表示されます。これにより「HTTP通信不可、確認画面表示(iアプリと同じ)、常に可能」に分かれます。
・EZwebホームページを作ろう(技術情報)
ezplusを含むEZweb公式ページ。ezplusの作成方法やツール、そして公開に必要なCGIやXHTMLなどについて。・STYLE-K(PC)
各種データやezplusを投稿できるEZ-BOARDや自作ezplusだけでなく、着メロデータに関する情報やEZweb対応のCGI作成も参考になります。EZweb版「 http://nana.ac/k 」・Mac・GPS・Perl
GPS関連の情報が分かりやすく書かれています。GPSの測値系変換を学ばせていただきました。