2009年4月アーカイブ

Android1.5のAPI変更点「Android 1.5 Version Notes | Android Developers」の一つとして、

Redesigned Sensor Manager APIs

と書かれているとおり、Sensor ManagerのAPIが変更になりました。

 

パッケージ(Package)

1.1と1.5ともに、センサーAPIは、android.hardwareパッケージにあり、変更なし。

 

インターフェース(Interface)

1.1では、SensorListenerだけですが、
1.5では、SensorListenerが非推奨APIとなり、その置き換えとしてSensorEventListenerが追加されました。

SensorListener、SensorEventListenerインターフェースともに、実装すべきメソッドは、
onAccuracyChanged()とonSensorChanged()の2つですが、引数が変更になっています。

 

クラス(Class)

1.1では、SensorManagerだけですが、
1.5では、SensorManagerに加え、GeomagneticField、Sensor、SensorEventが追加されています。

SensorManagerについては、メソッドの変更が加えられており、
必ず使うところでは、registerListener()の引数が、
1.1では、registerListener(SensorListener, int)だけですが、
1.5では、registerListener(SensorEventListener, Sensor, int)が追加され、従来のものが非推奨APIになっています。

Sensorは、SensorManager.getSensorList()で取得でき、
従来、利用可能なセンサをビットフィールドでまとめて表現していたものを個別で表現できるように置き換えたものです。

SensorEventは、SensorListenerの置き換えであるSensorEventListenerの引数として使われるものです。

 

サンプルソースコード

現時点(2009/4/30)では、Android SDK 1.5のサンプルソースコードに含まれるApiDemos - Sensors.javaは、
1.1から更新されておらず、1.5用のコードはありませんでした。。。
よって、以下に1.1と1.5の違いを比較できるようなサンプルソースコードを作成しましたので掲載しておきます。
「// 1.1」と「// 1.5」 の箇所を入れ替えることで、両方試すことができます。

package com.adakoda.sensortest;

import java.util.List;

import android.app.Activity;
import android.hardware.Sensor;    // 1.5
import android.hardware.SensorEvent;    // 1.5
import android.hardware.SensorEventListener;    // 1.5
//import android.hardware.SensorListener; // 1.1
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;

public class SensorTestActivity extends Activity
    implements SensorEventListener { // 1.5
//    implements SensorListener { // 1.1
    
    private boolean mRegisteredSensor;
    private SensorManager mSensorManager;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mRegisteredSensor = false;
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        
        // 1.5
        {
            List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
            
            if (sensors.size() > 0) {
                Sensor sensor = sensors.get(0);
                mRegisteredSensor = mSensorManager.registerListener(this,
                    sensor,
                    SensorManager.SENSOR_DELAY_FASTEST);
            }
        }
        
//        // 1.1
//        {
//            int sensors = mSensorManager.getSensors();
//            if ((sensors | SensorManager.SENSOR_ORIENTATION) != 0) {
//                mRegisteredSensor = mSensorManager.registerListener(this,
//                        SensorManager.SENSOR_ORIENTATION,
//                        SensorManager.SENSOR_DELAY_FASTEST);
//            }
//        }
    }

    @Override
    protected void onPause() {
        if (mRegisteredSensor) {
            mSensorManager.unregisterListener(this);
            mRegisteredSensor = false;
        }
        
        super.onPause();
    }
    
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) { // 1.5
//    public void onAccuracyChanged(int sensor, int accuracy) { // 1.1
    }

    @Override
    public void onSensorChanged(SensorEvent event) { // 1.5
//    public void onSensorChanged(int sensor, float[] values) { // 1.1

        // 1.5
        {
            if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
                // values[0]:
                // Azimuth, angle between the magnetic north direction and the Y axis,
                // around the Z axis (0 to 359). 0=North, 90=East, 180=South, 270=West
                // values[1]:
                // Pitch, rotation around X axis (-180 to 180),
                // with positive values when the z-axis moves toward the y-axis.
                // values[2]:
                // Roll, rotation around Y axis (-90 to 90),
                // with positive values when the x-axis moves away from the z-axis.             
                Log.v("ORIENTATION",
                    String.valueOf(event.values[0]) + ", " +
                    String.valueOf(event.values[1]) + ", " +
                    String.valueOf(event.values[2]));
            }
        }
        
//        // 1.1
//        {
//            if (sensor == SensorManager.SENSOR_ORIENTATION) {
//                // values[0]:
//                // Azimuth, rotation around the Z axis (0<=azimuth<360).
//                // 0 = North, 90 = East, 180 = South, 270 = West
//                // values[1]:
//                // Pitch, rotation around X axis (-180<=pitch<=180),
//                // with positive values when the z-axis moves toward the y-axis.
//                // values[2]:
//                // Roll, rotation around Y axis (-90<=roll<=90),
//                // with positive values when the z-axis moves toward the x-axis.
//                Log.v("ORIENTATION",
//                    String.valueOf(values[0]) + ", " +
//                    String.valueOf(values[1]) + ", " +
//                    String.valueOf(values[2]));
//            }
//        }
    }
}

Android Virtual Devices (AVDs)

Android 1.5 SDK で新規に追加されたAndroid Virtual Devices (AVDs)とは、
エミュレーターオプション情報を保持した構成(AVD)のことであり、
後述するandroidツールから複数の構成(AVD)を管理(作成、削除、更新)することできます。

これにより、Android 1.5 SDKから、Android 1.1のエミュレーターやAndroid1.5のエミュレーターを使い分けることができるだけでなく、
複数の異なるハードウェア構成も使い分けることができます。

また、Android 1.5 SDKをインストール後、AVDを一度も作成していない状態では、
Androidプロジェクト(プログラム)を実行することができないため、このAVDを作成する作業は、必須の作業となります。
※ちなみに、この時に表示されるエラーは、以下のような内容(target 'xxx'は、プロジェクトのターゲットによって表示内容が異なります)
 Failed to find an AVD compatible with target 'Android 1.1'. Launch aborted.
 Failed to find an AVD compatible with target 'Android 1.5'. Launch aborted.
 Failed to find an AVD compatible with target 'Google APIs'. Launch aborted.

ちなみに、Android 1.5 Early Look SDKでAVDを作成済の方は、同情報が残っていれば、(当然ですが)上記エラーは表示されません。
※AVDの情報のデフォルトパスは、例えばWindowsの場合、%ユーザー%\android\avd下にあります(android -pオプションで変更可能)

 

androidツールのインストール場所

Android 1.5 SDKインストール先のtoolsフォルダ下にある「android」。
※Windowsの場合、正確には「android.bat」

 

作成可能なターゲット(target)の列挙方法

AVDを作成するためには、まず、作成可能なターゲットのidを知る必要があり、そのためには、以下のように実行します。

android list targets

すると、下図のように利用可能なターゲット(「id: 1」「id: 2」「id: 3」)が表示されますので、
idに対応する「API level」などを参考に、作成したいターゲットを決めてください。

android_list_targets.png

 

AVD作成方法

例えば、ターゲットidが2(この例では、Android 1.5)として、「my_android1.5」という名前のavdを作成するには、以下のように実行します。

android create avd -n my_android1.5 -t 2

すると、
「Do you wish to create a custom hardware profile [no]」
のようにカスタムハードウェアを作成するか聞かれるので、作成しない(デフォルト構成の)場合、Enterキーを押すと、作成完了です。

カスタムハードウェアを作成するには、同問い合わせで、「yes」と入力し、
続けて聞かれる情報に答えていけば、任意のハードウェア構成のAVDを作成できます。

カスタマイズ可能なハードウェア情報は、以下のとおりです。

ram size、Touch-screen support、Keyboar support、DPad support、GSM modem support、Camera support、Maximnum horizontal camera pixels、Maximnum vertical camera pixels、GPS support、Battery support、Accelerometer、Audio recording support、Audio playback support、SD Card support、Cache partition support、Cache partition size

 

AVD使用方法

作成したAVDは、エミュレータを起動する際の第1引数に、@(アットマーク)つきでAVD名を指定すると使用することができます。

emulator @my_android1.5

 

AVD削除方法

例えば、「my_android1.5」という名前のavdを削除するには、以下のように実行します。

android delete avd -n my_android1.5

前回「[Android] Android 1.5 SDK への更新方法 - adakoda」の記事(Android SDK、Eclipse ADTプラグインの更新方法)の続きで、
今回は、Android 1.0~1.1SDKで作成されたプロジェクトをAndroid 1.5 SDKに更新する方法です。
※ただし、APIの変更による移行方法(マイグレーション)は除く

やはり、公式ページの解説は、こちら「Upgrading the SDK | Android Developers」の下部(Update Your Projects)。

 

1. 対象のAndroidプロジェクトを選択し、(Windowsの場合、右クリックなどで)プロパティを表示する

Properties.png

 

2. 表示されたProperties画面で、(左側ペインでAndroidが選択されている状態で)右側ペインのProject Build Targetから、
任意のターゲット(下図では、Android 1.5をターゲットにしている)を選択し、「OK」をクリックする

PropertiesAndroid.png

 

すると、プロジェクトフォルダ下に「gen」フォルダ、R.javaファイルが自動的に作成され、作業は完了です(プロジェクトの更新のみですが)。

また、「gen」フォルダは作成されるが、R.javaファイルが作成されていない場合、
例えば、×アイコンが消えず、「R cannot be resolved」エラーが表示されている場合、
「Project」メニュー、「Clean」を実行し、(自動)ビルドすると、R.javaファイルを再作成できます。
「The type R is already defined」エラーの場合も、R.javaファイルを手動で削除すればOKです。

Android 1.0 SDK, Release 1(android-sdk-1.0_r1)
Android 1.0 SDK, Release 2(android-sdk-1.0_r2)
Android 1.1 SDK, Release 1(android-sdk-1.1_r1)
Android 1.5 Early Look SDK(android-sdk-1.5_pre)
から、
Android 1.5 SDK, Release 1(android-sdk-1.5_r1)
へ更新する手順について。

公式ページの解説は、こちら「Upgrading the SDK | Android Developers」。

以下、その日本語解説です。
※Eclipse3.4ユーザーを対象に記載しているため、その他の方は読み換えてください

 

SDKのインストール(Install the SDK)

こちらのダウンロードページ(公式)「Android 1.5 SDK, Release 1 | Android Developers」から、
任意のOS(Platform)のSDKをダウンロードする。

次に、(既に設定済の)Android SDKへのパス設定(環境変数など)を更新する。

 

ADTプラグインの更新(Update Your Eclipse ADT Plugin)

Android 1.5以降では、新しいADTプラグインとしてバージョン0.9が必要であり、
古い0.8以前のADTプラグインは使用できません。

古いADTプラグインのアンインストール(Uninstall your previous ADT plugin)

古いADTプラグイン(0.8以前)をお使いの方は、新しいADTプラグイン(0.9)をインストールする前に、
古いADTプラグインを削除する必要があります。

Android 1.5 Early Look SDK(android-sdk-1.5_pre)をお使いのユーザーで、
ADT-0.9_preをインストールしていた方は、この作業は不要です(後の更新作業は必要)。
※私も、この対象者で、アンインストールせず上手くいきました(が、気持ち悪いので消しても問題ないと思う(未確認)。。。)

0. Eclipseを起動していない場合、Eclipseを起動する
1. 「Help」メニュー→「Software Updates...」をクリックする
2. 「Installed Software」タブ(が表示されていることを確認する)
3. 「Android Editors」を選択した状態で、「Uninstall」をクリックする
4. (次の画面で)「Android Editors」がチェックされていることを確認し、「Finish」をクリックする
5. Eclipseを再起動する
※「Android Development Tools」はアンインストールしないでください
 (と書かれていますが、やはりアンインストールしても問題ないと思う(未確認)。。。)

新しいADTプラグインのインストール(Install the 0.9 ADT plugin)

0. Eclipseを起動していない場合、Eclipseを起動する
1. 「Help」メニュー→「Software Updates...」をクリックする
2. 「Available Software」タブをクリックする
3. 既に登録済の「http://dl-ssl.google.com/android/eclipse」(または、https://~)を展開し、
 「Developer Tools」をチェックし、「Install」をクリックする
4. (次の画面で)「Android DDMS」と「Android Development Tools」の両方がチェックされていることを確認し、「Finish」をクリック
5. Eclipseを再起動する

Eclipse Android SDK Preferencesの更新(Update your Eclipse SDK Preferences)

0. Eclipseを起動していない場合、Eclipseを起動する
1. 「Window」メニュー→「Preferences」をクリックする
2. (左側のペインの)「Android」をクリックする
3. (右側の)「SDK Location」のエディットを更新する
4. 「Apply」、「OK」をクリックする

「Android 1.5 SDK」もリリースされましたね。

http://developer.android.com/sdk/1.5_r1/index.html

これで、1.5としては、
Open Source Projectのソースコード、
Android SDK、
Android Dev Phone 1のシステムイメージ、
すべてがリリースされたことになります。

前回の記事「[Android] Android Dev Phone システムイメージ書き換え(Android1.5編) - adakoda」の続編です。

前回は、
「Update the Device Radio Firmware」→「Flash the System Image to the Device」
の方法について紹介しましたが、

今回は、
「Update the Device Radio Firmware」→「Copy the Recovery Image Package to the Device」
の方法を紹介します。
こちらの方法だと、Fastbootが不要なだけでなく、
「Update the Device Radio Firmware」と「Copy the Recovery Image Package to the Device」
の手順がほぼ同じため、こちらの方が簡単でした。。。

前回と今回の両方の手順が必要という意味ではないので、どちらか簡単と思われる方で試してみてください。

 

事前準備

http://www.htc.com/www/support/android/adp.html
から、バージョン毎のRadio Image、Recovery Imageをダウンロードする。

 

Update the Device Radio Firmware

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

 

Copy the Recovery Image Package to the Device

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

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

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

 

以下、実際にAndroid1.1からAndroid1.5へ書き換えた際のメモです。
更新方法には、
「Update the Device Radio Firmware」→「Copy the Recovery Image Package to the Device」
の方法と、
「Update the Device Radio Firmware」→「Flash the System Image to the Device」
の方法がありますが、ここでは、後者の方法を紹介します。
 

事前準備

上記サイトから、OS毎のfastboot、バージョン毎のRadio Image、System Imageをダウンロードする。

 

Update the Device Radio Firmware

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

 

Flash the System Image to the Device

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

 

ファームウェアのバージョンは、「Settings」-「About Phone」-「Firmware version」で確認できます。
Android 1.5の場合、「1.5」と表示されました。
しかしながら、「Settings」>「Locale & text」>「Select locale」では、「English」しか表示されませんでした。

android1.5.png

Android 1.5 SDK付属の「Spare Parts」アプリの「Battery information」を使用すると、以下のようなバッテリー情報を表示することできます。

BatteryInfo.png

※Android 1.1 SDK以前では、「Setting」アプリの「Abount Phone」>「Status」で、「Battery status」と「Battery level」しか表示できませんでした。

また、Android Marketにも、いくつかのバッテリー情報を取得するアプリが存在していたため、自分でも同情報を表示するアプリケーションを作成しようと試みたのですが、SDKのドキュメントを調べてみても、android.osパッケージのBatteryManagerクラスしか見つけられず。。。
(しかも、BatteryManagerは、ただの定数しか実装していないし。。。)

結局、androidのソースコードから検索して、Intent.ACTION_BATTERY_CHANGEDから取得できることがわかりました。
※ソースコード一式は、「バッテリーの情報(Battery information)を取得するには - 逆引きAndroid入門」に掲載しています

ところで、(受信した)Intent.ACTION_BATTERY_CHANGEDに対して、getIntExtra("status", )のようにキー名として、"status"を指定すると、ステータス情報を取得できるのですが、これらのキー名は、SDKのドキュメントに記載されていません。。。

今回は、ソースコードがあったのでキー名がわかったのですが、「インテントに格納されているキー名を列挙する」ということは可能でしょうか???どなたか ご存じであれば、教えてください。。。

Droid君、一目見た時から、「こいつはパスで描けそうだ!」と思っていたので実際に試してみました。。。

Path

ソースは、こちら(「パス(Path)を描画するには - 逆引きAndroid入門」)。
両目は、白の円で塗りつぶすのでなく、クリッピングしています。

ところで、頭から出でいる2本の線は、角?触覚?アンテナ???

[Android] AppWidget

| トラックバック(0) |

Androidの公式ブログ(Android Developers Blog)に、
Introducing home screen widgets and the AppWidget framework」という記事がありました。

内容は、Android 1.5 SDKで導入されたAppWidgetフレームワークにより、
開発者がホームスクリーン上でウィジットとして応答できるようになったということで、
具体的なサンプルソースコード(抜粋)と、その解説が掲載されています。
※サンプルソースコード(フル)の入手先(SVN  URL)については、「wiktionary-android - Google Code」に記載されています

また、AppWidgetについては、Android 1.5 SDK付属のApiDemosの下記ソースコードにもサンプルコードがあります。
%android-sdk-1.5_pre%\platforms\android-1.5\samples\ApiDemos\src\com\example\android\apis\appwidget\*.java

簡単に読んだ限りでは、以下の実装をすれば良さそうです。
※実際に試せてはないです...

1.AppWidgetProviderを継承したクラスを作成し、onUpdate()をオーバーライドして、フレームワークから呼び出されるウィジットの更新処理で、あなたのウィジットとして必要な処理を実装する。
このOnUpdate()では、時間のかかる処理をしてしまうと、Application Not Respoting(ANR)...応答なし、とみなされるので、そういう場合には、サービスで対応させる。

public class AppWidgetTest extends AppWidgetProvider {
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        Log.v("AppWidgetTest", "onUpdate");
    }
}

2.AppWidgetの最少幅、最小高さ、更新間隔などを記載したappwidget-providerをxmlに追加する。

<appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="(セル(区画)の数*74)-2)dipを指定する"
    android:minHeight="(セル(区画)の数*74)-2)dipを指定する"
    android:updatePeriodMillis="更新間隔をミリ秒でいれる"
    />

3.アプリがAppWidgetとしてふるまうために、「android.appwidget.action.APPWIDGET_UPDATEに応答できるよ」ということを、AndroidManifest.xmlで宣言し、応答するAppWidgetProviderを継承したクラス(上記の1)、appwidget-providerのxml(上記の2)をメタデータとして関連づける。

<!-- Broadcast Receiver that will process AppWidget updates -->
<receiver android:name=".AppWidgetProviderを継承したクラス名" android:label="ウィジット名文字列">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
        android:resource="@xml/appwidget-providerを記載したxmlファイル名(.xml拡張子は除く)" />
</receiver>
12

2014年3月

            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