2009年3月アーカイブ

ソフトウェアエミュレーターと実機のデバイスの両方が起動・接続している状態で、adb shellを実行した際に表示されるエラー。
対処方法は、どちらかを終了するだけ。
ホームキー(家のマーク)を長押しする。
※ここでのタスク切り替え画面とは、(すべてではないですが)Windows/LinuxのAlt + Tabキー、Mac OSXのCmd + Tabキーのようなイメージ

センサーマネージャーのサンプルコードです。

public class SensorSample extends Activity implements SensorListener {
    private SensorManager mSensorManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this,
SensorManager.SENSOR_ORIENTATION,
SensorManager.SENSOR_DELAY_FASTEST);
}

@Override
protected void onStop() {
mSensorManager.unregisterListener(this);
super.onStop();
}

@Override
public void onSensorChanged(int arg0, float[] arg1) {
switch (arg0) {
case SensorManager.SENSOR_ORIENTATION: // 1
// arg1[0]
// arg1[1]
// arg1[2]
break;
}
}
}

SensorManagerのインスタンスを取得するには、ActivityクラスのgetSystemService()を呼び出します。
センサーイベントをリスニングするには、同インスタンスに対し、registerListener()を呼び出します。
このとき、
第1引数には、SensorListnerを実装したクラスのインスタンス、
第2引数には、リスニングしたいセンサーの種類(をビットフィールドで指定)、
第3引数には、リスニングする頻度、
を指定します。
すると、SensorListnerを実装したクラスのインスタンスのonSensorChanged()が呼び出されますので、
引数として渡された、arg1[]を参照することで、センサーの値にアクセスできます。

参考となるサンプルコードは、ApiDemos\src\com\example\android\apis\os\Sensors.javaです。

※2009/04/07追記:public void onAccuracyChanged(int sensor, int accuracy) {} も必要です。
※2009/04/30追記:unregisterListener()を呼び出すのは、OnStop()よりも、onPause()の方が正しい?かも
※2009/04/30追記:更新された内容を含む新しい記事「[Android] Redesigned Sensor Manager APIs(Android1.5) | The type SensorListener is deprecated - adakoda」があります

トーン(BEEP音)生成のサンプルコード。

ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_SYSTEM, ToneGenerator.MAX_VOLUME);
toneGenerator.startTone(ToneGenerator.TONE_PROP_BEEP);
(緑の電話)通話キー + MENUキー + (赤の電話)切断キーを押す。

タッチイベントに応答するには、onTouchEvent()をオーバーライドします。

引数のMotionEventには、タッチされた際の情報が格納されてきますので、
getX()、getY()で、タッチされた座標、
getEventTime()で、タッチされた時間(ms)、
getAction()で、タッチアクションを取得できます。

タッチアクションとは、タッチ動作を表した定数で、例えば、
ACTION_DOWN→ACTION_MOVE(何回か繰り返し)→ ACTION_UP
のようになります。

参考となるサンプルコードは、ApiDemos/Graphics/FingerPaintです。

Droid 壁紙、Android Developer Badgeは、
こちらの公式サイト(http://www.android.com/media/goodies.html)からダウンロードできます。
※今まで勝手に「Android君」とか呼んでいたのですが、正しくは「Droid」だったんですね

壁紙

android-wallpaper3_thumbnail.pngandroid-wallpaper5_thumbnail.jpg
android-wallpaper4_thumbnail.pngandroid-wallpaper6_thumbnail.jpg

Android Developer Badge




Androidで、エミュレータ/デバイス(実機)の画面キャプチャーを保存するには、
Eclipse(+ADT)のDDMSパースペクティブ(perspective)Devicesタブで、Screen Captueボタンを押し、
表示されたDevice Screen Capture画面で、Saveボタンを押すと、pngファイルで保存することができます。
DDMSScreenCapture.png

DeviceScreenCapture.png

Android Dev PhoneのシステムイメージがHTCから正式に公開されました。

http://www.htc.com/www/support/android/adp.html

 

以下、実際にAndroid1.0からAndroid1.1へ書き換えた際のメモです。

 

事前準備

上記サイトから、OS毎のfastboot、バージョン毎のSystem Image、Radio Imageをダウンロードする。
※1.0、1.1の両方ダウンロードしておくことをお勧めします

 

Update the Device Radio Firmware

  1. デバイスにSDカードが挿入されていることを確認する
  2. デバイスを通常どおり起動する
  3. デバイスとPCをUSBで接続する
  4. コマンドラインから「adb devices」を実行し、デバイスと接続できていることを確認する
    ※「List of devices attached」の出力に続けて、デバイスのシリアル番号が表示されればOK
  5. コマンドラインから「adb push ota-radio-1_22_14_11.zip /sdcard/update.zip」を実行し、1~2分待つ
    ※ota~zipは、必要なバージョンに応じて適宜読み替えてください、ここでの例は、Android1.1に書き換える場合の例
    ※しばらく待つのは、コピーしたバイト数が表示されていても、バックグランドでコピーが実行されていて、完了していない場合があるため
  6. (家のマークの)HOMEキーを押したままリブートし、いつものAndroid君のあとに、
    (びっくりマーク)!アイコンが表示されるまで(押したまま)待つ
    ※リブートは、「adb shell」「su」「reboot」、もしくは、電源長押し後、電源を切って、入れ直す
  7. キーボードを出して、ALT + l キーを押し、Android system recovery utilityを起動させる
    ※ここでの l キーは、エルキーです、アイキーでも、数字の1キーでもないです
  8. ALT + s キーを押し、(先の5でコピーしておいた)update.zipの書き込みを実行させる
  9. 書き込みのプログレスバーが消えたら、
    (家のマークの)HOMEキー + (戻るマークの)BACKキーを押し、
    radio imageの書き込みを実行させると、矢印のイメージのあとに、自動的に再起動され、
    さらに、別のイメージが表示された後、通常どおり起動されます

Flash the System Image to the Device

  1. (戻るマークの)BACKキーを押しながら電源を入れる
    ※3体のAndroid君がスケートボードに乗っているイメージに、FASTBOOTが表示されればOK
    ※黄色いラインにFASTBOOTでなく、Serial0が表示されている場合には、
     (戻るマークの)BACKでFASTBOOTに切り替えることができる(逆は、カメラキー)
  2. デバイスとPCを(USB接続していなければ)接続する
  3. 必要であれば、コマンドラインから「fastboot erase userdata」を実行する
    ※実行すると、ダウンロードしたアプリや、その他の設定が削除されます
     (SIMロックを解除していた情報や、セットアップ時に登録したgoogle acountなども含む)
     多くの場合、バージョンアップの際には不要です(バージョンダウンでは必要)
  4. コマンドラインから「fastboot erase cache」を実行する
  5. コマンドラインから「fastboot update signed-dream_devphone-img-130444.zip」を実行する
    ※signed~zipは、必要なバージョンに応じて適宜読み替えてください、ここでの例は、Android1.1に書き換える場合の例
    ※fastbootモードを抜けるには、ADP1の場合、、
     (緑の電話)通話キー + (赤の電話)切断キー + MENUキーを押すと、再起動できる
    ※< waiting for device >と表示されていれば接続に失敗している
     Windowsの場合であれば、デバイスマネージャーから
     「ADB Interface - HTC Dream Composite ADB Interface」
     「ディスクドライブ - HTC Android Phone」
     「ポータブルデバイス - Android Phone」などを削除し、再インストールする
  6. 自動的に再起動されるはずであるが、そうでない場合、「fastboot reboot」を実行する
    ※確認した限りでは、自動的に再起動されました

 

ファームウェアのバージョンは、Setting - About Phone - Firmware versionで確認できます。

ハマりどころは、fastbootで< waiting for device >と表示された場合の対処方法ですが、それ以外は問題なくできました。

 

※参考にした記事

エミュレーター/デバイス(実機)のシリアル番号を取得するには、

adb get-serialno

を実行します。

実行結果は、エミュレーターの場合、

emulator-5554

などとなります。

 

内部的には、クライアントからエミュレーター/デバイス(実機)のadb serverプロセスに、TCP5037ポートで接続し、

0012host:track-devices

を送信すると、サーバーからの応答として、4バイトのASCII文字列である

OKAY

の戻り値に続けて、
複数のエミュレーター/デバイス(実機)の情報を格納した文字列

0015emulator-5554\tdevice\n

が返却されます。
この文字列は、\n区切りで1つのエミュレーター/デバイス(実機)を表現しており、
さらに、その中の文字列は、\t区切りで、前半をシリアル番号、後半がstateという意味になっています。

※クライアント/サーバーともに、送受信の際の先頭4バイト(上記の場合、0012や0015)は、それ以降のデータの長さを16進数で表現した文字列です

12

2016年8月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31