ラベル iAppli の投稿を表示しています。 すべての投稿を表示
ラベル iAppli の投稿を表示しています。 すべての投稿を表示

2008年9月21日日曜日

ComponentListenerの覚書[doja]

http://www.rcdtokyo.com/man/doja/api/com/nttdocomo/ui/ComponentListener.html

ComponentListenerは、Component自体が呼び出すのではなく、そのComponentがaddされているPanelクラスによって呼び出される。
Panel p = new Panel();
p.setComponentListener(listener);


Panelを継承したクラスでComponentListenerも実装すれば、Componentイベントを自身で管理できる。
class HogePanel extends Panel implements ComponentListener{
public HogePanel(){
this.setComponentListener(this);
}
}


ComponentListenerを実装したクラスはcomponentActionをオーバーライドしなければならない。componentAction(Component source, int type, int param)

ただし、いくつも同じコンポーネントクラスのインスタンスを作成している場合は、ComponentListener側ではどのクラスインスタンスのイベントなのか分からんので、ifとequals()で手当たり次第に探したりする。
または、Componentを継承したクラス自体を独自に作成しておいて、区別し易くなるような属性を付加しておいたりするといいかもしれない。

2008年9月19日金曜日

HTMLLayoutの覚書[doja]

ちょっと覚書

クラス HTMLLayout
http://www.rcdtokyo.com/man/doja/api/com/nttdocomo/ui/HTMLLayout.html

DojaでPanelを利用するとき、Componentの配置にはHTMLLayoutを使うと、その名の通りHTMLライクに配置が出来る。

例えば、こういうHTMLソースがあったとする。
some text
<br>
<center>
<button id="1">
<button id="2">
</center>

HTMLLayoutを使って、こんな感じで書ける。(pはPanelのインスタンス、lmはHTMLLayoutのインスタンス、labelは"some text"のLabelクラス)
p.add(label);
lm.br();
lm.begin(HTMLLayout.CENTER);
p.add(button1);
p.add(button2);
lm.end();

2008年9月10日水曜日

DojaでスクラッチパッドへのI/Oのテンプレ

ちょっとした覚書で

…と言って、晒してたコードが激しくボケたもんだったことに気付いたので削除しました。
間違ってあんなん参考にされたらとんでもない orz

2008年7月21日月曜日

LEGO MINDSTORM NXTを操作するiアプリを作……れなかった

我武者羅に作ってきましたが、全部無駄だったと分かりました。

iアプリで、GPSやBluetoothやメール機能などなどのセキュリティ的に危うい部分にアクセスするには、iモードのコンテンツ提供業者として認可されないといけないみたいです。認可を受けるとTrustedAPIDというのが発行されて、そいつをADF設定に突っ込むことでBluetooth機能などがiアプリから制御可能になるということです。
下調べって重要ですね orz

あぁ……Smartphone買っちまうかなぁ……



それと、今日買ってきた参考書↓

Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)
高町 健一郎

アイ・ディ・ジー・ジャパン 2007-10-06
売り上げランキング : 3878

Amazonで詳しく見る
by G-Tools

お勉強のために買ってみた。何分、にわかLinuxユーザなのもので……

たまたま持ってたUbuntu本の裏表紙にこの本の広告が載ってて、初心者なおいらにぴったりだろう、と思って購入してみた。
電車の中なんかで読みたいと思ってたのだけど、いざ書店に行ってみたらA4サイズだったのでちょっと逡巡したが結局買ってしまった。

そしてブログに書いておこうと思い、リンクを張るためにAmazonの商品ページに行ったらレビューで高評価だったので読む前から満足しちゃってる俺。つか、買う前にちったあ調べるべきだったよなァ

2008年7月20日日曜日

LEGO MINDSTORM NXTを操作するiアプリを作りたい3

とりあえず、Bluetooth接続まわりのコードを少しずつ書いてます。

とりあえず、Bluetooth接続してNXTとのメッセージ送受信を行うNXTCommクラスを作成中。
メソッドの名前とか定数名とかはRuby-NXTまんまにしとくのが分かり易いかな。

public class NXTComm implements BTStateListener{

static Bluetooth bt = null;
static RemoteDevice rd = null;
static SPPConnection connection = null;
static OutputStream output = null;
static InputStream input = null;

//Constructer
public NXTComm() {
Dialog dialog = null;

//Bluetooth initialize
//Connect NXT
try{
bt = Bluetooth.getInstance();
rd = bt.searchAndSelectDevice();
if(bt.isConnectable(Bluetooth.SPP) == false
|| rd.isAvailable(Bluetooth.SPP) == false){
throw new Exception("Cannot use SPP");
}
connection = (SPPConnection)rd.connect(Bluetooth.SPP);
connection.setBTStateListener(this);
output = connection.openOutputStream();
}catch(Exception e){
dialog = new Dialog(Dialog.DIALOG_ERROR,"Bluetooth");
dialog.setText("ERROR:" + e);
if(rd == null){
dialog.setText("ERROR:" + e + ",RemoteDevice:null");
}
dialog.show();
IApplication.getCurrentApp().terminate();
}
} //end of Constructer

//BTStateLisntener interface's abstract method
//call when Bluetooth connection state changes.
//ex:Disconnected.
public void stateChanged(int state){
Dialog dialog = new Dialog(Dialog.DIALOG_ERROR,"Bluetooth");
if(state == DISCONNECT){
dialog.setText("ERROR:Disconnected.");
}else{
dialog.setText("ERROR:" + Integer.toString(state));
}
dialog.show();
IApplication.getCurrentApp().terminate();
}

その他メソッドなどなど、、、工事中

}


ともかく動けば良い精神でテキトーに書き進めてるので、気づくと美味しいスパゲッティになってるんだろうなぁ。。。

2008年7月19日土曜日

iアプリの大会に出るのでDojaの基本をおさらい

出ます。

去年も出た大会なんだけども、その時は時間が無くててんで駄目だった。2次予選で落ちました。
今年こそは本戦出場!っていう感じで行きたいのです。

で、これだけだと記事としてどうなのよ、ということで、何となくiアプリ(Doja)の基本をおさらい。

Dojaでは、Java標準のパッケージの代わりにDoja専用のものを使う。
import com.nttdocomo.ui.*;
import com.nttdocomo.device.*;
こんな感じ。

Javaではプログラムはシステムから呼び出されたクラスのmain()メソッドから実行が開始されるが、DojaではIApplicationクラスを継承したクラスのstart()メソッドから実行される。
public class DojaApplication extends IApplication{
public void start(){
・・・
}
}
上記の事を除けば、あとはJavaとほとんど同じ。
ただし、iアプリを作る際には、この他にADF設定というのが必要になってくる。これはiアプリに関する各種パラメータを設定するもので、スクラッチパッドの使用量など、実際にiアプリが動作する際に重要になってくる部分だ。通常のJavaコンパイラを使わず、専用のiアプリ作成ツールが必要になる理由がこのあたり。

ぶっちゃけ、俺もADF設定のあたりはよく分かっていなかったり。

2008年7月17日木曜日

LEGO MINDSTORM NXTを操作するiアプリを作りたい2

何でお前ソフトバンクユーザなのにiアプリ作ろうとしてるんじゃい。というご意見はもっとですが、単にコンテンツアグリゲータに登録するのが面倒なだけです orz
何か作品を公開しようっていうわけじゃないし。このアプリを作ったらもう使わなくなるだろうし。。。
それに、iアプリは以前にコンテストに出場しようとした事があるので、作成経験があるのです。

んで、本題。
どうやら、iアプリ製作ツール標準のエミュレータでBluetooth機能も使えるらしいんだけど、その設定方法が分からない。
そもそも、全世界で日本のNTTドコモだけが使っている仕様だけに関する資料が少ない orz
APIリファレンスがあるからコーディングは出きるだろうけど、そのテストが出来ないんじゃなぁ。。。
MIDP羨ましい。。。
Willcom 03買ってMIDPで作っちまおうかとか考えてるくらいです。

2008年7月16日水曜日

LEGO MINDSTORM NXTを操作するiアプリを作りたい

目標はタイトルの通り。

言わずもがな、iアプリはJavaで作るわけだけども(正確にはiアプリ向けのプロファイルDoja)、JavaでNXTを動かすAPIは既に存在してる。
LeJOS, Java for Lego Mindstorms - http://lejos.sourceforge.net/

でも、これがDojaで、実機のFOMAで、動作するかはまったく分からない。そもそもiアプリ製作ツール付属のエミュレータってBluetooth機能を試すときはどうするんだ? その前に対応してるのか?

というわけで、まぁDoja標準のBluetoothの機能を使うなら確実だろうから、それを使うことになったときのためにまとめておく。

com.nttdocomo.device.Bluetooth
http://www.rcdtokyo.com/man/doja/api/com/nttdocomo/device/Bluetooth.html
端末のBluetooth 機能を表すクラスを定義します。このクラスでは、端末の Bluetooth 機能を呼び出して、 外部機器の検索、機器選択、機器登録、各種設定などを行います。 外部機器が選択されると、その外部機器に対応したRemoteDeviceクラスのオブジェクトを取得します。

com.nttdocomo.device.RemoteDevice
http://www.rcdtokyo.com/man/doja/api/com/nttdocomo/device/RemoteDevice.html
Bluetoothで端末と接続される外部機器を表すクラスを定義します。外部機器との接続は、 i アプリから接続要求(connect(int profile))を出すか、 もしくはその外部機器からの接続要求を受け付けること(accept(int profile))で行います。同じ Bluetooth アドレスを持つ有効なインスタンスが複数存在することはありません。

com.nttdocomo.device.BTStateListener
http://www.rcdtokyo.com/man/doja/api/com/nttdocomo/device/BTStateListener.html
Bluetoothの接続状態の変化に関するイベントのリスナを定義します。

com.nttdocomo.device.BTConnection
http://www.rcdtokyo.com/man/doja/api/com/nttdocomo/io/BTConnection.html
Bluetoothの接続を定義します。

com.nttdocomo.device.SPPConnection
http://www.rcdtokyo.com/man/doja/api/com/nttdocomo/io/SPPConnection.html
Serial Port Profile (SPP)で通信を行う場合の接続を定義します。 Serial Port Profile (SPP)を使ったデータの入出力のためのストリームを取得します。 端末がサスペンドし、レジュームした際、サスペンド前に取得済みのストリームを利用することができます。

そしてこの辺りを参考にすれば実装できるんじゃないかと思う。
http://bearmini.net/blog/View.aspx?bid=1&aid=133&cid=13


だが、最大の問題は俺がソフトバンクユーザなことだ。