2010年10月11日月曜日

Java reflection

Java でリフレクションを使って動的にimport出来ない関数を呼び出す方法。
inputのパラメータは適宜使いたいものに変更。

Boolean[] input={new Boolean(true)};
//using reflection
try{
// call class name
Class cl = Class.forName(*******);
Class[] par = new Class[1];
par[0]=Boolean.TYPE;
// import dynamic class library function
// ここで動的に関数を呼び出す
Method mthod=cl.getMethod(******, par);
mthod.invoke(mWebView.getSettings(), input );
/* normal sequence functions */
}catch(Exception e){
/* exception error */
}

うーん、書いてはみたもののまだいまいち腑におちてないかんじ。
参考リンク:
Flash devlop on Android 1.5
Javaプログラミングのダイナミクス 第二回
Javaプログラミングのダイナミクス 第三回

2010年10月5日火曜日

Wirelessが死んだ。。

自宅のUbuntuはSuspendからの復帰時大体キーが効かなくなって再起動するハメになる。
これはこれで解決しないといけないのだけど、この時一緒にWirelessもDisableになって使えなくなってしまった。
その時の復帰の方法は、以下。
System > Administration > Users and Groups
でログイン名を選択し、
Advanced setting > User privileges
で,Connect to wireless and ethernet networkにチェックを入れたらOK.
でも、何で突然ここだけチェックが外れるのかな。。。

2010年10月1日金曜日

LiveWallPaper - Android

作りかた。
Dynamic Displayのレンダリングのため,Surface Viewを利用
ユーザのスクリーンタッチイベントを取得したり、イベント処理も必要。
作るコンポーネントは以下3つ。

  • Live Wallpaper用のXML resource

Androidのお作法で、res/xmlの中に作る。
wallpaper がTop elementで、その中のuser attributesとしてauthor, description, thumbnailを指定。
これらがWallpaper設定時の選択画面で出てくる表示になる。
追加で何か設定させたい場合(画像や図選択、挙動の設定などなど)は、"SettingActivity"tagを指定すれば、独自の設定画面を用意できる。

  • Wallpaper serviceの実装

Wallpaperserviceの拡張を行う。ここでWallpaperService Engineクラスのインスタンス化。
すべてのdrawing処理、インタラクションはwallpaper service engine クラスでハンドルされる。
このサービスを、マニフェストにserviceとして登録。
また、Live wallpaperはandroid.service.wallpaper.WallpaperService のIntent Filterを含む必要がある。
また、meta-dataノードにandroid.service.wallpaperをname attributeとして、
リソースファイルをresouece attributeとして追加。
また、BIND_WALLPAPER パーミッションも必要なのでこれも追加。


  • Wallpaper engineの実装 (WallpaperService.Engineのインスタンスを新規に作成して返す。)

WallPaperServiceクラスでは、必ずEngineの実装が必要。WallpaperService.Engineクラス拡張をする。
このEngineは、Surface(壁紙表示、タッチイベントの取得)をカプセル化している。Surfaceはバックグランドスレッドのアップデート、スムーズネス、動的でインタラクティブ表示)の描画サポートを行うcanvasの一種。
drawingする前には、必ずonsurfaceCreatedのイベントハンドラで示される初期化を待つ必要がある。
その他、イベントコールバックの実装が必要。(onTouchEvent などなど。)