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を見てみましたがすいません意味わかりません。
まだまだ解析には時間がかかる……
Preference
http://d.hatena.ne.jp/planetsquare/20091107/1257589954
Settingsみたいな画面をどうやって作るんだろうということで、Settingsを読んでたら、
Preferenceというのを使っているらしい。
別のActivityに簡単に飛べるから、練習用Activityへの入り口としてちょうどいいかな、ということでチャレンジ。
……たぶん本来の使い方とはかけ離れてるけど。
使い方は↑のリンク先様でもまとめられているとおり、
- Activityではなく、PreferenceActivityをextendsする
- /res/layoutではなく/res/xmlにxmlファイルを置く
- setContentView(R.hogehoge)ではなくaddPreferencesFromResource(R.xml.fuga)を使用する
リンク先様で書かれてるのにわざわざ書いたのは、まさに全部引っかかったからです、はい。
SettingsのPreferenceScreenというのを見ただけで使おうとしたのが悪いんですね。はい。
あと、別のActivityに飛ばすために実際に行う作業としては
- AndroidManifestにActivity追加
- /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との間で共有フォルダ作成。
- デバイス→共有フォルダで適当なディレクトリ選択。
- デバイス→Gest Additions
- mount -t iso9660 /dev/cdrom /mnt
- /mnt/autorun.sh(これはいらないかも)
- /mnt/VBoxLinuxAdditions-x80.run
- reboot後(ないしはxのreboot後)、mount -t vboxsf share_name /mnt
しまった、これだとubuntu側のファイルを全部/mntに入れないとwindowsから見られない。
何故かlnも怒られるし……仕方ない、samba立ち上げよう。
- sudo apt-get install samba gadmin-samba
- sudo gadmin-samba
何故かユーザを追加できない。
で、ファイルブラウザでディレクトリを選択して右クリック→共有オプションで適当に設定したらいけた。
Windowsから、さっき追加できなかったメインユーザで入れました。
途中途中でアクセスしてなかったからどれが効いたのかわからん…
まあ動いたのでよしとしよう。
ネットワークドライブを適当に設定して、すぐアクセスできるようにした。
さあ、Settingsあたりでも見て勉強しよう。
ネットワーク設定
仮想マシンから外部ネットワークに接続するまで。
VMwareだとブリッジに接続するだけで簡単にできたような……
- ホスト側でローカルエリアネットワークとVirtualBoxのネットワークを選択し、ブリッジ接続を作成する
- 作成されたブリッジ接続のIPを設定(ホストのIP)
- ゲスト側で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なら指定できるんだろうけど……