Androidの最近のブログ記事

以前のセンサー記事「[Android] Redesigned Sensor Manager APIs(Android1.5) | The type SensorListener is deprecated - adakoda」にも書いたSensorEventListener.onSensorChanged()に渡されるSensorEvent.values[0~2]の値は、順にAzimuth(方位角)/Pitch(傾斜)/Roll(回転)の値であり、ヘルプには、以下のように書かれています。

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.

が、わかりにくいですし、説明もしづらい。。。
と思っていたら、わかりやすい説明を見つけました。

http://www.novoda.com/blog/wp-content/uploads/2009/05/sensoreventcheatsheet_v1.pdf
※実機で確認済です

[Android] HTC Magicを予習する

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

HTCのAndroid Phone2号機であるHTC Magicの情報は、
こちらのHTC公式ページ(http://www.htc.com/www/product/magic/overview.html)にあります。

また、Android Phone1号機であるHTC Dreamの情報も、
こちらのHTC公式ページ(http://www.htc.com/www/product/dream/overview.html)にありますので、
それらの仕様(Specification)ページを見比べることで、スペックの差異を比較できます。

さて、何故?今更?このタイトルで、この内容の記事を書くのか?

答えは、こちらのリンク先(http://xenonews.blog50.fc2.com/blog-entry-2014.html)から。

また、同ページのさらにリンク先(https://fjallfoss.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&RequestTimeout=500&calledFromFrame=N&application_id=585270&fcc_id=%27NM8SPRD%27)も必見。

※あわせて読みたい(参照したい)

※Android関連のニュースは、こちら「Android ニュースリンク集 - adakoda

[Android] 初めてのAndroid

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

日本でのAndroid本としては5冊目、はじめてのAndroid系としては3冊目となる
「初めてのAndroid」という本が、オライリー・ジャパンから発売されるみたいです。

「初めてのAndroid」は、E Burnette先生が書かれた「Hello, Android」という洋書の翻訳本とのことですが、こちらの目次を見る限り、これまで購入した本と重複しない内容が結構含まれており、なかなか良さげです。しかも手頃な価格。

監訳は、日本Androidの会の先生方ということで、同会の5/11のイベントで先行即売会があるようです(しかもTシャツつき!)。

私は、イベントには行けませんですが、ネットで注文しましたので、後日、レビュー記事を掲載したいと思います。

初めてのAndroid

Android 1.5で追加されたLive Folders(ライブフォルダ)の説明については、以下の記事が参考になります。

Android 1.5に搭載される「Live Folders」とは:モバイルチャンネル - CNET Japan
「akaiho St. » Live FolderやAppWidgetで見えてきたAndroidに込められた狙い」←安生先生

ここでは、そのLive Foldersの起動(呼び出し)方法について、紹介します。

Live Foldersの起動(呼び出し)方法

1.Home画面のショートカットアイコン以外の任意の場所を長押しする
※長押しとは、エミュレーター使用時の入力デバイスがマウスの場合は、左ボタンを長く押す、実機(デバイス)使用時の場合は、指で長く押す

2.表示された「Add to home screen」で「Folders」を選択する

add_to_home_screen.png

3.表示された「Select folder」で追加したいフォルダ(例えば、下図ではAll contacts)を選択する

select_folder.png

4.すると、Home画面にフォルダ(下図では、All Contacts)が追加されます

all_contact.png

5.フォルダ(上図では、All Contacts)を選択する

all_contact_result.png

Android 1.5 で追加されたAppWidgetの実装方法については、以前、「[Android] AppWidget - adakoda」の記事で紹介しましたが、今回は、Home画面へWidgetを追加する方法について紹介します。

Home画面へWidgetを追加する方法

1.Home画面のショートカットアイコン以外の任意の場所を長押しする
※長押しとは、エミュレーター使用時の入力デバイスがマウスの場合は、左ボタンを長く押す、実機(デバイス)使用時の場合は、指で長く押す

2.表示された「Add to home screen」で「Widget」を選択する

add_to_home_screen.png

3.表示された「Choose widget」で追加したいWidget(例えば、「Analog clock」とか)を選択する

choose_widget.png

4.すると、Home画面にWidgetが追加されます

widget_result.png

※Home画面からWidgetを削除するには、Widgetを長押しして、ごみ箱にドラッグします
※デフォルトのWidgetとしては、上図の「Analog clock(画面中央)」「Search(画面上部)」の他に、「Music」「Picture frame」などがあります、Android 1.5から追加されたAppWidgetを使用すれば、このようなWidgetが自作できます!

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] Android 1.5 SDK Release

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

「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のシステムイメージ、
すべてがリリースされたことになります。

<<前のページへ 2425262728293031323334

Android 楽しいよ!

2010年12月

      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  

自作フリーソフトウェア