« 2009年6月 | メイン | 2009年8月 »

2009年7月

2009年7月28日 (火)

NetBeansでアンドロイド対応アプリの開発

キャリアごとに異なる開発環境に手を出すのは面倒だと思っていたが、やっとdocomoがアンドロイド対応携帯を販売。

パソコン上でエミュレータを使い、どんな画面が表示されるか見てみることにする。

手順は以下のとおり

1.Android SDK をダウンロード(この中にAndroid携帯エミュレーターも含まれている)

2.NetBeansにAndroid対応プラグインを組み込む

(3.エミュレーターを起動)・・・NetBeansから自動起動でもよい

4.NetBeansでサンプルを作成し、エミュレーター画面で動作確認

<詳細>

1.Android SDKのインストール

(1)以下からWindows用をダウンロードし、解凍

現在Android 1.5 SDK, Release 3が最新

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

(2)解凍したAndroid SDKを任意のフォルダに移動

ここでは、"C:\Program Files\android-sdk-1.5" に置いた。

(3)プログラムのPathを通す。

コントロールパネル->システム->詳細設定->環境変数->システム環境変数 とクリックし、Pathの最後に上記のパス「;C:\Program Files\android-sdk-1.5」を追加。以下このディレクトリを、Android SDKと呼ぶ。

2.NetBeansにAndroidプラグインを組み込む

(1) NetBeansを起動し、ウール->プラグイン->設定タブで追加とクリック

(2) アップデートセンターカスタマイザが表示されたら、名前欄に「nbandroid」、URL欄に以下を入力し、了解をクリック

(3) 使用可能なプラグインタブで、Androidを選択し、インストールボタンをクリック

(4) ガイダンスにしたがってライセンスを受諾すると、妥当性検査の警告画面が表示されるが、そのままインストールを行う。

http://kenai.com/downloads/nbandroid/updates.xml

3.エミュレーターを起動

(1) AVD(Android Virtual Device - Android仮想デバイス)の準備

AVDのディレクトリ及びファイルには、emulatorを動かす際に必要となる、Android仮想デバイスのHW情報やAndroidのスキンなどの動作環境が含まれる。環境に応じ、複数作成して使い分けられるようになっている。

アンドロイドとGoogle MapがエミュレーターのAVD上で動くように、以下のコマンドをコマンドプロンプト画面から入力

> Android SDK\tools>android create avd --name androidpc --target 3

ここでnameオプションの値には任意の名前を指定。targetオプションの値は、以下を表す。

id: 3

Name: Google APIs

Type: Add-On

Vendor: Google Inc.

Description: Android + Google APIs

Based on Android 1.5 (API level 3)

Libraries:

* com.google.android.maps (maps.jar)

API for Google Maps

Skins: QVGA-P, HVGA-L, HVGA (default), QVGA-L, HVGA-P

(2) 成功すると、以下のようなメッセージが表示される。

Created AVD 'androidpc' based on Google APIs (Google Inc.)

作成したAVDファイルの内容は、以下のようにして確認できる。

Android SDK\tools>android list avd

Available Android Virtual Devices:

Name: androidpc

Path: C:\Documents and Settings\ユーザ名\.android\avd\androidpc.avd

Target: Google APIs (Google Inc.)

Based on Android 1.5 (API level 3)

Skin: HVGA

詳しくはインストールディレクトリの下の docs\guide\developing\other-ide.html を参照。

(3)エミュレーターの起動

以下のコマンドをコマンドラインから実行すると、1~2分ほどかかるが赤いAndroidエミュレーターの画面が表示される。@の後ろに、仮想デバイスの名前を指定。

Android SDK\tools>emulator @androidpc

* NetBeansからプロジェクトを実行すると、自動的にエミュレータを起動することも出来る。が、エミュレーターの起動が非常に遅い。

また、NetBeansからエミュレーターを自動起動すると、以下のようなエラー?が表示される。構築成功しているし、Menuボタンを押すと、実行されている。この問題に関してはあちこちで記載を見かけるが別途、宿題とする。いったん起動しておけば、エラーは発生しない。

DDM dispatch reg wait timeout

Can't dispatch DDM chunk 52454151: no handler defined

4.NetBeansでサンプル作成

(1) 新規プロジェクト->Android(カテゴリ)->Android Application(プロジェクト)と選択し、次へ

(2) Android Platformの欄に "Missing pPlatform: NO PLATFORM" と表示されていたら、以下のようにプラットフォームを登録。

・Manage Platforms ->プラットフォームを追加->Google Android Open Handheld Platformラジオボタンをクリックし、次へ

・プラットフォームフォルダを選択画面で、"Android SDK"を選択し次へ

・ここではMapを使いたいので、Google APIsを選択し、完了ボタンをクリック

(3) プラットフォームが設定されると、プロジェクトが生成される。作成されるファイル名はMainActivity.java。自動生成されるテンプレート内容は、以下のとおり。

*Activityとは、Androidで動作する個々の画面。

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package org.me.sample1;

import android.app.Activity;

import android.os.Bundle;

/**

*/

public class MainActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

// ToDo add your GUI initialization code here

}

}

(4) 画像と文字を表示するサンプルを作ってエミュレータに表示する。

表示する画像 android.png を、NetBeansのプロジェクトディレクトリの下、res(リソース)にディレクトリ images を作って置く。

*NetBeansのResourcesディレクトリ下に作成。

(5) ソースの修正

次のクラスファイル import文を追記

import android.widget.ImageView; // 画像表示クラス

import android.widget.TextView; // 文字表示クラス

import android.widget.LinearLayout; // レイアウト

// ToDo の部分に以下の処理を記述。

LinearLayout linearLayout = new LinearLayout(this);

// 画面左から右へ表示

linearLayout.setOrientation(LinearLayout.HORIZONTAL);

ImageView hwiv = new ImageView(this);

// 画像の場所:Sample1\res\images\android.png

hwiv.setImageResource(R.images.android);

linearLayout.addView(hwiv);

TextView tv = new TextView(this);

tv.setText("Hello みなさん!\nこんにちは");

linearLayout.addView(tv);

setContentView(linearLayout);

(6) プロジェクト実行ボタンをクリックする。

しばらくほっておくと、節電モードで画面が暗くなる。それっぽい。

ちなみに、インストールディレクトリの下、toolsディレクトリに、sqlite3.exeがある。アンドロイドではSQLiteが使えるらしい。

参考: Taosoftwareさん、JavaDriveさん、@IT あたりが分かりやすい。

詳しくは、デベロッパー ガイド、インストールディレクトリ下のdocs\guide\tutorials などを参照のこと

2009年7月13日 (月)

NetBeans IDE 6.7正式版

Windows 版の6.7 Betaを使っていたが、コンパイルエラーでもないのにコンパイルエラーが表示され実行エラーになったりで、困惑していた。

正式版になって、この不明なコンパイルエラーが解消された。

以下、タイマーを使ったデスクトップアプリケーションサンプル

5秒おきに、画面上の時刻を更新する。

1.IDEのインストール

以下からJavaと書いてあるパッケージをダウンロード

http://www.netbeans.org/downloads/index.html

インストール時に、GlassFishかApache Tomcat Webサーバーを選択

ここでは、Apacheを選択し、GlassFishはインストールからはずす。好みで。

*インストール後に、IDEのメニューから別のパッケージを追加することも出来る。

2.IDEの起動

開始ページが表示される。

3.デスクトップアプリケーションサンプル構築

(1) メニューから、新規プロジェクトのアイコンをクリック

カテゴリ・・Java、プロジェクト・・Javaアプリケーション を選択し、次へ

(2) プロジェクト名を入力

*プロジェクト名は、パッケージ名や主プロジェクトのクラス名に利用される。

(3) プロジェクトが構築されると、以下のファイルが作成される。

NetBeansProjects\TimerSample\TimerSample.java

4.F6を押して実行

TimerSample.javaのデザイン画面が表示される。

5.変更

ここで文字コードの話を。

NetBeansではプロジェクトごとに文字コードを設定することが出来る。

デフォルトではソースも画面のエンコーディングもUTF-8

このため、入力ファイルがShift_JISなどの文字コードの場合は、文字コード変換処理が必要となる。

上記のサンプルでは、入力ファイルもプロジェクトもUTF-8で作ったため、windowsのDOSコンソールで実行すると、文字化けが発生する。こちらは Shift_JISであるため。

Javaの入出力に関しては「Javaの入出力(Stream)について」など

2009年7月 2日 (木)

Google Earthでマーカーを動的に動かす

Google EarthはKMLファイルを扱うことが出来るが、この中のNetworkLinkの機能を利用して、マップ上のマーカーを一定時間ごとに動的に動かす。

携帯GPSと連動して、(ほぼ)リアルタイムに現在地をマップに表示する。

*NORADのサンタトラッキングは、このネットワークリンクの機能を使っている。

最初に読み込むKMLのサンプル

kanko.kml

<?xml version="1.0" encoding="UTF-8"?>

<kml xmlns="http://earth.google.com/kml/2.0">

<Document id="kanko">

<Placemark id="path10">

<name>関内エリア</name>

<Style>

<LineStyle>

<color>ffff0000</color>

<width>6</width>

</LineStyle>

</Style>

<LineString>

<coordinates>

139.632375833333,35.4516791666667,2

139.632345277778,35.4514308333333,2

139.632292222222,35.4511866666667,2

139.632231111111,35.4509880555556,2

</coordinates>

</LineString>

</Placemark>

<Placemark id="pm10">

<name>関帝廟</name>

<description>Kanteibyo</description>

<Point>

<coordinates>139.645178,35.442439,5</coordinates>

</Point>

</Placemark>

<NetworkLink>

<name>Update PM in 60 secs</name>

<Link>

<refreshMode>onInterval</refreshMode>

<refreshInterval>60</refreshInterval>

<href>http://MyServer.com/Update.kml</href>

</Link>

</NetworkLink>

</Document>

</kml>

<coordinates>タグで囲まれた部分は、Google Earthで取得したパス(ルート)の経度,緯度を記述している。高度に関しては、Google Earth上でプロットしたパスは高度が0となるため、一律2に変更している。

ここでは<refreshInterval>タグで、60秒おきにUpdate.kmlファイルを読み込むよう指定

行って時間ごとに呼び出されるマーカーの位置アップデート用ファイル

Update.kml

<?xml version="1.0" encoding="UTF-8"?>

<kml xmlns="http://earth.google.com/kml/2.1">

<NetworkLinkControl>

<Update>

<targetHref>http://MyServer.com/kanko.kml</targetHref>

<Change>

<Placemark targetId="pm10">

<name>I'm here!</name>

<description>walking route</description>

<Point><coordinates>139.648019,35.446589,2</coordinates></Point>

</Placemark>

</Change>

</Update>

</NetworkLinkControl>

</kml>

この2つのファイルをサーバーにおく

Google Earthのメニューから、追加->ネットワークリンクとクリック

新規ネットワークリンク画面が表示されたら、リンク入力欄にKMLファイルのURLを入力

ここでは、http://MyServer.com/kanko.kml と入力

OKボタンをクリックすると、マップ上にパスが描かれ、自動更新が開始される。

<結果画面>

<マーカーの位置更新>

携帯から位置を取得したとき、Update.kml の緯度経度情報を更新するプログラムを作成。

Google Earth上は、60秒おきに更新ファイルを読み込んでマーカーを更新するので、PCの負荷が高くなるようならネットワークリンクのチェックボックス非表示にしておく。

<更新以外の方法>

<Delete>, <Create> タグを用いて、マーカーやパスを追加、削除することが出来る。

詳しくは「KML リファレンス」を参照。

<Google Earthでパスを入力する方法>

メニューの「パスを追加」アイコンをクリックするか、追加->パスとクリック。

新規パスダイアログが表示されたら、左クリックで画面上のルートを順次クリックすると赤い線が描かれる。

左クリックしたままドラッグで、ハンドライティングっぽいパスが描ける(酔っ払いみたい)。

完了したら、OKボタンをクリック

<パスをKMLファイルに出力>

左メニューの場所一覧から、作成したパスを選択し、右クリック

名前をつけて場所を保存、でKMLファイルに出力

このファイルをエディタで開いて緯度、経度を取り出す

Google Earthで使えるKML リファレンスについては、こちら

2010年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      

My Favorite Songs

  • My foolish heart
    Bill Evans Trio: Waltz for Deby (★★★★★)