Wi-Fiのスキャン結果アップデート

6/9に作った、Wi-FiでスキャンしたAPが表示される機能に、ボタンを押したらReloadって機能を追加してみた。
onClickListenerの中でLinearLayout作ったりTextView作ったり触ったりするのにいろいろ混乱したけど……とりあえずできた。


触ってると、連続でReloadしまくっても結果が全然更新されない。
数秒待ってからReloadすれば結果が変わる。
LogCat見てると、前のスキャンから数秒後にwifi supplicantがCTRL EVENT SCAN RESULTSを投げている模様。


つまりこれが投げられたのを受け取るor感知してReloadすれば、SettingsとかWifiAnalyzerみたいに自動アップデートできるのかな?
……と思ってSettingsを見てみましたがすいません意味わかりません。
まだまだ解析には時間がかかる……

JDK5 + Eclipseでエラー

別の環境でEclipse使ってAndroid環境作ったら、/res/layout/*.xmlを開くとEclipseが落ちるようになりました。
というか、そもそもEclipseでオプション-Xmx512mを消さないとEclipseそのものが立ち上がらなかったけど……


結局古いJDK5を消して、PATHをJDK6のに変えたら問題なく動くようになりました。
EclipseのせいなのかADTのせいなのかわからないけれど。

Preference

http://d.hatena.ne.jp/planetsquare/20091107/1257589954


Settingsみたいな画面をどうやって作るんだろうということで、Settingsを読んでたら、
Preferenceというのを使っているらしい。
別のActivityに簡単に飛べるから、練習用Activityへの入り口としてちょうどいいかな、ということでチャレンジ。
……たぶん本来の使い方とはかけ離れてるけど。


使い方は↑のリンク先様でもまとめられているとおり、

  1. Activityではなく、PreferenceActivityをextendsする
  2. /res/layoutではなく/res/xmlxmlファイルを置く
  3. setContentView(R.hogehoge)ではなくaddPreferencesFromResource(R.xml.fuga)を使用する


リンク先様で書かれてるのにわざわざ書いたのは、まさに全部引っかかったからです、はい。
SettingsのPreferenceScreenというのを見ただけで使おうとしたのが悪いんですね。はい。


あと、別のActivityに飛ばすために実際に行う作業としては

  1. AndroidManifestにActivity追加
  2. /res/xmlのPreferenceのファイルに、PreferenceScreenを追加、その中にintentでandroid:targetClassで飛ぶ先のclassを指定する。






飛ぶ先のActivityのClassは通常通りsetContentViewなどでActivity立ち上げる。

Android 1.6(Donut) ソース入手まで

Ubuntu10.04に必要なパッケージを入れるところから。


http://ubuntuforums.org/showthread.php?t=1289730
sun-java5-jdkが標準のリポジトリから無くなったようなので、
/etc/apt/sources.list
に以下を追加。


deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse


以下、、sudoで。


$ sudo apt-get install git-core sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev


$ cd ~
$ mkdir bin
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo


$ mkdir mydroid
$ cd mydroid
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b donut
$ repo sync


それと平行してWindowsとの間で共有フォルダ作成。

  1. バイス→共有フォルダで適当なディレクトリ選択。
  2. バイス→Gest Additions
  3. mount -t iso9660 /dev/cdrom /mnt
  4. /mnt/autorun.sh(これはいらないかも)
  5. /mnt/VBoxLinuxAdditions-x80.run
  6. reboot後(ないしはxのreboot後)、mount -t vboxsf share_name /mnt


しまった、これだとubuntu側のファイルを全部/mntに入れないとwindowsから見られない。
何故かlnも怒られるし……仕方ない、samba立ち上げよう。

  1. sudo apt-get install samba gadmin-samba
  2. sudo gadmin-samba

何故かユーザを追加できない。


で、ファイルブラウザでディレクトリを選択して右クリック→共有オプションで適当に設定したらいけた。
Windowsから、さっき追加できなかったメインユーザで入れました。
途中途中でアクセスしてなかったからどれが効いたのかわからん…


まあ動いたのでよしとしよう。
ネットワークドライブを適当に設定して、すぐアクセスできるようにした。
さあ、Settingsあたりでも見て勉強しよう。

ネットワーク設定

仮想マシンから外部ネットワークに接続するまで。
VMwareだとブリッジに接続するだけで簡単にできたような……

  1. ホスト側でローカルエリアネットワークとVirtualBoxのネットワークを選択し、ブリッジ接続を作成する
  2. 作成されたブリッジ接続のIPを設定(ホストのIP)
  3. ゲスト側でIP、gatewayなどをホスト側に会わせて設定

これでapt-get updateも通る。

adb install -r hogehoge, uninstall fugafuga.hogehoge

eclipseでちょっと編集した後、adb uninstall ができなくて、
実機側でuninstlalしてからadb install していて面倒だった。


……-rってオプションあるんですね。
http://groups.google.com/group/android-developers/browse_thread/thread/37cadb587f17ef2e
ちゃんとadbのhelpにも出てきますね……


adb install -r hogehoge.apk
でuninstallしなくても、実機触らずにコマンド1つで上書きできました……


ついでにuninstallも。
アプリ名を指定するんじゃなくて、パッケージを指定するんですね。

adb uninstall fugafuga.hogehoge

View系の使い勝手がわからない

ボタンを押したらLinearLayoutにTextViewを追加するコードを書こうとしたけれども
TextViewをnewするときの引数がわからんとです……


OnCreateとか、Activityをextendsしたメソッドの中でnewする場合はthisを指定すればいいのはわかるんだけど、
Buttonを押したときの、OnClickListenerをOnCreateの中で作っていた場合、どう指定すればいいやら。


staticなclassなら指定できるんだろうけど……