AndroidSDKに含まれる”application components”にはActivity、Service、Broadcast Intent Receiver、Content Providerという4種類があります。例えばServiceはViewをもたないので、アプリケーションをバックグラウンドで動作させたいときなどに使います。詳しい説明は、ドキュメントを見てもらうとして、さっそくServiceを使ったアプリケーションを作ってみようとしたところ、つまずいた初歩的なミスです。
Serviceのサブクラスを作って、例えばAPI DemoesのLocalServiceあたりを見ながら適当にソースコードをいじってビルドすると、以下のようなエラーが出てしまうことがあると思います。
こうなったときは、まずAndroidManifest.xmlをチェックしましょう。呼び出し元のActivityだけでなく、呼び出し先のServiceも記入されているでしょうか。
<service android:name=".HogeClass" />
これがないと、指定のクラスを認識しないような状況になるみたいです。初歩の初歩だと思いますが、僕の場合は、これに気づくのに相当時間がかかりました。気をつけましょう・・・。AndroidManifest.xmlについては、しっかり勉強しておかないとこれからも変なところでひっかかりそうですな。
Serviceのサブクラスを作って、例えばAPI DemoesのLocalServiceあたりを見ながら適当にソースコードをいじってビルドすると、以下のようなエラーが出てしまうことがあると思います。
WARN/ActivityManager(57): Unable to start service Intent { comp={呼び出し元のActivity/呼び出し先のService} }: not found
こうなったときは、まずAndroidManifest.xmlをチェックしましょう。呼び出し元のActivityだけでなく、呼び出し先のServiceも記入されているでしょうか。
<service android:name=".HogeClass" />
これがないと、指定のクラスを認識しないような状況になるみたいです。初歩の初歩だと思いますが、僕の場合は、これに気づくのに相当時間がかかりました。気をつけましょう・・・。AndroidManifest.xmlについては、しっかり勉強しておかないとこれからも変なところでひっかかりそうですな。
2009/02/18: Androidで扱えるセンサー
ドキュメントでセンサーの項を見ると、様々なセンサーが扱えることが分かります。
・SENSOR_ACCELEROMETER (加速度)
・SENSOR_MAGNETIC_FIELD (方位)
・SENSOR_LIGHT (輝度)
・SENSOR_ORIENTATION (傾き)
・SENSOR_PROXIMITY (近接)
・SENSOR_TEMPERATURE (温度)
・SENSOR_TRICORDER (??)
・STANDARD_GRAVITY (重力)
面白いのが、重力値の定数に地球以外の値も含まれている点。
GRAVITY_DEATH_STAR_I
GRAVITY_EARTH
GRAVITY_JUPITER
GRAVITY_MARS
GRAVITY_MERCURY
GRAVITY_MOON
GRAVITY_NEPTUNE
GRAVITY_PLUTO
GRAVITY_SATURN
GRAVITY_SUN
GRAVITY_THE_ISLAND
GRAVITY_URANUS
GRAVITY_VENUS
なんに使うんだ?という感じもしますが。
あと、輝度の定義値にもいろいろあります。これは、地域によって違わないものかという気も。
LIGHT_CLOUDY
LIGHT_FULLMOON
LIGHT_NO_MOON
LIGHT_OVERCAST
LIGHT_SHADE
LIGHT_SUNLIGHT
LIGHT_SUNLIGHT_MAX
LIGHT_SUNRISE
輝度とか近接とかはiPhoneにもあるみたいですね。(輝度は環境光で画面の明るさ調節のため、近接は通話中かどうかの判別用だと思うので、スピーカーの近くにあるのかな?)
一番不可解なのがTRICORDERです。スタートレックに出てくるものらしいんだけど。見たことないので何なのかさっぱり。。。
まあ、なんとなく遊び心は感じます。
・SENSOR_ACCELEROMETER (加速度)
・SENSOR_MAGNETIC_FIELD (方位)
・SENSOR_LIGHT (輝度)
・SENSOR_ORIENTATION (傾き)
・SENSOR_PROXIMITY (近接)
・SENSOR_TEMPERATURE (温度)
・SENSOR_TRICORDER (??)
・STANDARD_GRAVITY (重力)
面白いのが、重力値の定数に地球以外の値も含まれている点。
GRAVITY_DEATH_STAR_I
GRAVITY_EARTH
GRAVITY_JUPITER
GRAVITY_MARS
GRAVITY_MERCURY
GRAVITY_MOON
GRAVITY_NEPTUNE
GRAVITY_PLUTO
GRAVITY_SATURN
GRAVITY_SUN
GRAVITY_THE_ISLAND
GRAVITY_URANUS
GRAVITY_VENUS
なんに使うんだ?という感じもしますが。
あと、輝度の定義値にもいろいろあります。これは、地域によって違わないものかという気も。
LIGHT_CLOUDY
LIGHT_FULLMOON
LIGHT_NO_MOON
LIGHT_OVERCAST
LIGHT_SHADE
LIGHT_SUNLIGHT
LIGHT_SUNLIGHT_MAX
LIGHT_SUNRISE
輝度とか近接とかはiPhoneにもあるみたいですね。(輝度は環境光で画面の明るさ調節のため、近接は通話中かどうかの判別用だと思うので、スピーカーの近くにあるのかな?)
一番不可解なのがTRICORDERです。スタートレックに出てくるものらしいんだけど。見たことないので何なのかさっぱり。。。
まあ、なんとなく遊び心は感じます。
2009/02/17: リソースのン名前は小文字と数字のみ
リソースフォルダ下のファイル名には、a-z0-9_.しか使えない!
これを知らずにMP3の名前に大文字を使っていて、時間を食いました。EclipseのIDE上コピペの方法を変えたりリネームしたりBuild Pathとかいうコマンドして変になったり、R.javaを強制編集もしくは強制生成させる方法を探してたんですが。実はコンソール見たらちゃんと警告でてたー!全然気づかなかった・・・
不慣れとはいえ、先入観を持たないようにしよう。注意深くならないと。
あと、今日はドキュメントの一部が古かったりして、それを自力で何とかしようとして挫折したりで、開発全然進みませんでした。まぁ、こんな日もあるかぁ。
これを知らずにMP3の名前に大文字を使っていて、時間を食いました。EclipseのIDE上コピペの方法を変えたりリネームしたりBuild Pathとかいうコマンドして変になったり、R.javaを強制編集もしくは強制生成させる方法を探してたんですが。実はコンソール見たらちゃんと警告でてたー!全然気づかなかった・・・
不慣れとはいえ、先入観を持たないようにしよう。注意深くならないと。
あと、今日はドキュメントの一部が古かったりして、それを自力で何とかしようとして挫折したりで、開発全然進みませんでした。まぁ、こんな日もあるかぁ。
2009/02/17: 列挙型(enum)
せっかくなんでJavaの話もしましょう。というか、超基本の部分ですが。
列挙型(enum)というのを知りました。Cとかにもあるんですね。ASにもあれば結構使えるような気がするけど。
列挙型の使い方解説 > [Java] enum basics / しげるメモ
列挙型(enum)というのを知りました。Cとかにもあるんですね。ASにもあれば結構使えるような気がするけど。
列挙型の使い方解説 > [Java] enum basics / しげるメモ
2009/02/16: screenOrientationで画面の向きを設定
画面の向きの設定はAndroidManifest.xmlの中で設定できます。コードの中で直接いじれないものかやってみましたが、挫折しました。もしかして出来ないのかも。
Activity要素の中のscreenOrientationで設定します。
ドキュメントにある設定値は下記。
・unspecified (システムで判断?)
・landscape (横長の向き)
・portrait (縦長の向き)
・user (ユーザに従う?)
・behind (親のActivityに従う)
・sensor 傾き検知)
・nosensor (傾き検知を常に無視?)
いまいち謎なものもありますが、練習がてらテストできるアプリを作りました。behindなど、Activityのネストにも関係あるものがあったので、一つ目の画面(=FirstActivity)でSecoundActivityの設定、2つ目の画面(=SecoundActivity)でthirdActivityの設定をするようにしてみました。(分かりにくっ)
こんな感じ↓
FirstActivity(ListView) ←screenOrientation = user
└SecoundActivity(ListView)
└ThirdActivity(FinalView)
Activityのネストや、Intentを使ったActivity間でデータの受け渡しなどの勉強になりました。ActivityはControllerと考えればよいのかな?という印象。
ちなみにFirstActivityのscreenOrientationはuserにしてます。
1)FirstActivity
親ActivityのscreenOrientationを設定
2)SecoundActivity
子ActivityのscreenOrientationを設定
3)ThirdActivity
子Activityのの表示結果
RotateTest(ソース)
ソース公開しといてですが、インストールするとアプリケーションの名前が「RotateTest」ではなく、「Choose parent activity's screenOrientation」と表示されます。
これは、メインのActivityのラベル名になってしまっているためです。ちゃんとstrings.xmlでapp_nameを定義してるのに謎・・・
Activity要素の中のscreenOrientationで設定します。
<activity android:label="Label Name" android:name=".ClassName" android:screenOrientation="landscape">
ドキュメントにある設定値は下記。
・unspecified (システムで判断?)
・landscape (横長の向き)
・portrait (縦長の向き)
・user (ユーザに従う?)
・behind (親のActivityに従う)
・sensor 傾き検知)
・nosensor (傾き検知を常に無視?)
いまいち謎なものもありますが、練習がてらテストできるアプリを作りました。behindなど、Activityのネストにも関係あるものがあったので、一つ目の画面(=FirstActivity)でSecoundActivityの設定、2つ目の画面(=SecoundActivity)でthirdActivityの設定をするようにしてみました。(分かりにくっ)
こんな感じ↓
FirstActivity(ListView) ←screenOrientation = user
└SecoundActivity(ListView)
└ThirdActivity(FinalView)
Activityのネストや、Intentを使ったActivity間でデータの受け渡しなどの勉強になりました。ActivityはControllerと考えればよいのかな?という印象。
ちなみにFirstActivityのscreenOrientationはuserにしてます。
1)FirstActivity
親ActivityのscreenOrientationを設定
2)SecoundActivity
子ActivityのscreenOrientationを設定
3)ThirdActivity
子Activityのの表示結果
RotateTest(ソース)
ソース公開しといてですが、インストールするとアプリケーションの名前が「RotateTest」ではなく、「Choose parent activity's screenOrientation」と表示されます。
これは、メインのActivityのラベル名になってしまっているためです。ちゃんとstrings.xmlでapp_nameを定義してるのに謎・・・
2009/02/14: I am an Android
2009/02/14: Android Dev Phone 1のスクリーンサイズ
2009/02/13: Android Dev Phone 1をSIMカードなしでアクティベート
Android Dev Phone 1(ADP1)をSIMカードなしでアクティベートする方法です。
ADP1を起動すると、「No SIM card」と表示された後二進も三進もいかない!僕はAUユーザのためSIMカードなど持っていませんし、ちょっと焦りました。
しかし、ちゃんとSIMカードなしでアクティベート(アカウントなど各種設定をしてG1を使える状態にすること)する方法を公開してくれている方がいました。
>Android Dev Phone 1 を SIM無しで設定する / ちょっと、やったこと/思うこと
以下の方法は、ほぼ上記サイトの方法と同じですが、一応まとめます。
【ADP1を開封してからアクティベートまで】
予めADKやEclipseのインストールなど一通り終わらせておきます。
1)ADP1にバッテリー入れる
ADP1の背面のゴム樹脂の部分がパカッとはずせるので、はずして付属のバッテリーを入れる。
2)ADP1起動
「No SIM card」と表示され何も出来ません。
3)ADP1を付属のUSBケーブルでPCと接続
ここにあるように、まずはADP1のドライバを入れる。
次の4のはじめで
$ adb shell
error: device not found
とエラーが出るときは、ドライバを入れ忘れてる可能性があります。
4)コマンドプロンプトを起動してADP1にアクセスし、設定を変更していく
ここからここの5番の手順です。
以下のコマンド(青字の部分)を順に入力
5)ADP1再起動
ここでこちらの7番ではリブートするとありますが、コマンドラインでのリブートの仕方が分からなかったので、普通にADP1の電源ボタン長押しで電源を切って入れるという手動の方法を行いました。これでもいいみたいです。
6)コマンドラインからADP1のWi-Fi接続画面の呼び出し
もう一度コマンドプロンプトを起動して以下のコマンドを実行します。
少し待つと、ADP1に「wireless controll」画面が現れます。
7)Wi-Fi接続
「wireless controll」画面でWi-Fiを有効にして、Wi-Fi settingsから接続先のネットワークを選択し、パスワードなどを入れます。
8)アクティベートのための設定
後は、Googleのアカウント設定などを画面の指示に従って行けば完了です。
【ADP1でデバッグ】
さきほどのこちらを参考にしましょう。
ふー、iPod touchのJailbreakほどではないけれど、ちょっと大変でした。
ADP1を起動すると、「No SIM card」と表示された後二進も三進もいかない!僕はAUユーザのためSIMカードなど持っていませんし、ちょっと焦りました。
しかし、ちゃんとSIMカードなしでアクティベート(アカウントなど各種設定をしてG1を使える状態にすること)する方法を公開してくれている方がいました。
>Android Dev Phone 1 を SIM無しで設定する / ちょっと、やったこと/思うこと
以下の方法は、ほぼ上記サイトの方法と同じですが、一応まとめます。
【ADP1を開封してからアクティベートまで】
予めADKやEclipseのインストールなど一通り終わらせておきます。
1)ADP1にバッテリー入れる
ADP1の背面のゴム樹脂の部分がパカッとはずせるので、はずして付属のバッテリーを入れる。
2)ADP1起動
「No SIM card」と表示され何も出来ません。
3)ADP1を付属のUSBケーブルでPCと接続
ここにあるように、まずはADP1のドライバを入れる。
次の4のはじめで
$ adb shell
error: device not found
とエラーが出るときは、ドライバを入れ忘れてる可能性があります。
4)コマンドプロンプトを起動してADP1にアクセスし、設定を変更していく
ここからここの5番の手順です。
以下のコマンド(青字の部分)を順に入力
adb shell
$ id
id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1011
(adb),3003(inet)
$ su
su
# id
id
uid=0(root) gid=0(root) groups=1003(graphics),1004(input),1007(log),1011(adb),30
03(inet)
# cd data/data/com.android.providers.settings/
cd data/data/com.android.providers.settings/
# ls
ls
lib
databases
# cd databases
cd databases
# ls
ls
settings.db
# sqlite3 settings.db
sqlite3 settings.db
SQLite version 3.5.9
Enter ".help" for instructions
sqlite> SELECT * FROM system;
SELECT * FROM system;
1|volume_music|11
(※省略)
55|font_scale|1.0
sqlite> INSERT INTO system (name, value) VALUES ('device_provisioned', 1);
INSERT INTO system (name, value) VALUES ('device_provisioned', 1);
sqlite> SELECT * FROM system;
SELECT * FROM system;
1|volume_music|11
(※省略)
56|device_provisioned|1
5)ADP1再起動
ここでこちらの7番ではリブートするとありますが、コマンドラインでのリブートの仕方が分からなかったので、普通にADP1の電源ボタン長押しで電源を切って入れるという手動の方法を行いました。これでもいいみたいです。
6)コマンドラインからADP1のWi-Fi接続画面の呼び出し
もう一度コマンドプロンプトを起動して以下のコマンドを実行します。
adb shell
$ am start -a android.intent.action.MAIN -n com.android.settings/.Settings
少し待つと、ADP1に「wireless controll」画面が現れます。
7)Wi-Fi接続
「wireless controll」画面でWi-Fiを有効にして、Wi-Fi settingsから接続先のネットワークを選択し、パスワードなどを入れます。
8)アクティベートのための設定
後は、Googleのアカウント設定などを画面の指示に従って行けば完了です。
【ADP1でデバッグ】
さきほどのこちらを参考にしましょう。
ふー、iPod touchのJailbreakほどではないけれど、ちょっと大変でした。
2009/02/13: Android Dev Phone 1
ちょうどこのブログの設置をしていると、玄関のチャイムが鳴ってAndroid Dev Phone 1(T-mobile G1)が到着しました。UPS便は初めて利用したので受け取りのサインがペンタブレットであることに驚きました(めっちゃ書きにくい・・・)。
$399 (USD) 、円高の影響で4万円弱でした。
一昨日の夜に注文して今日の昼到着なので、早い!
さっそく開封してみると、iPod touchとほぼ同じ大きさ。ディスプレイはiPot touchの方が大きく、厚みはやっぱ・・・厚いな。
入力端子がminiUSB一個しかないんですね(と思ったら微妙に形違う。miniUSB端子の充電器差込めないじゃん!)。トラックボールのさわり心地が気持ち良いです。
さっそくあれこれいじってみます。
$399 (USD) 、円高の影響で4万円弱でした。
一昨日の夜に注文して今日の昼到着なので、早い!
さっそく開封してみると、iPod touchとほぼ同じ大きさ。ディスプレイはiPot touchの方が大きく、厚みはやっぱ・・・厚いな。
入力端子がminiUSB一個しかないんですね(と思ったら微妙に形違う。miniUSB端子の充電器差込めないじゃん!)。トラックボールのさわり心地が気持ち良いです。
さっそくあれこれいじってみます。
2009/02/13: About ...
はじめまして。どこまで行くか分からないので、こっそりはじめます。
iPhoneやAndroidなど、モバイル系のアプリケーションの開発メモを載せていこうと思います。といっても僕自身がObjective-C超苦手なので、ほとんどAndroidとJavaの話になると思います。
チュートリアルなど、基本的な情報はすでにリソースが結構あるので、そういうのはいちいちまとめません。そういうリソースを元に勉強しつつ、つまずいた点や分かった点を自分の備忘録代わりに載せていこうと思います。
ちなみに、僕のスキルがどの程度かというと、
・Xcodeが出たときにObjective-Cいじってみて、ものすごく挫折した。
・AS3でオブジェクト指向な開発は出来る。
・JavaはJAVAでモーションプログラミング―MacOS Xプログラミングという本を昔読んでいじった、他はProcessing絡みで触れた程度で、あまり知識はない。
同程度のスキルをお持ちの方に役立てるようにしたいと思います。
玄人さまのご助言大歓迎ですので、お気軽にコメントしてください!
開発は主に次の環境で行っていきます。
・MacBook
- ntel Core2DUO 2.4GHz
- DDR3 SDRAM - 4GB
- WindowsXP HomeEdition SP3 (BootCamp)
- Eclipse Platform Version: 3.4.1
- Android 1.1 SDK r2(随時更新してくと思います)
・Android Dev Phone 1(T-mobile G1)
iPhoneやAndroidなど、モバイル系のアプリケーションの開発メモを載せていこうと思います。といっても僕自身がObjective-C超苦手なので、ほとんどAndroidとJavaの話になると思います。
チュートリアルなど、基本的な情報はすでにリソースが結構あるので、そういうのはいちいちまとめません。そういうリソースを元に勉強しつつ、つまずいた点や分かった点を自分の備忘録代わりに載せていこうと思います。
ちなみに、僕のスキルがどの程度かというと、
・Xcodeが出たときにObjective-Cいじってみて、ものすごく挫折した。
・AS3でオブジェクト指向な開発は出来る。
・JavaはJAVAでモーションプログラミング―MacOS Xプログラミングという本を昔読んでいじった、他はProcessing絡みで触れた程度で、あまり知識はない。
同程度のスキルをお持ちの方に役立てるようにしたいと思います。
玄人さまのご助言大歓迎ですので、お気軽にコメントしてください!
開発は主に次の環境で行っていきます。
・MacBook
- ntel Core2DUO 2.4GHz
- DDR3 SDRAM - 4GB
- WindowsXP HomeEdition SP3 (BootCamp)
- Eclipse Platform Version: 3.4.1
- Android 1.1 SDK r2(随時更新してくと思います)
・Android Dev Phone 1(T-mobile G1)