libro
www.tuyano.com
Google androidプログラミング入門

ハードウェア・アクセス (7/7)

作成:2010-06-16 17:02
更新:2010-06-16 20:59

■GSPを利用する

ケータイのハードウェアで重要なものといえば、「GPS」もあげられるでしょう。GPSの値が簡単にプログラム内から取り出せれば、位置を利用したアプリが簡単に作れるようになります。

※AndroidManifest.xmlの追記
GPSを利用する場合、そのアプリからGPSデータへのアクセスを許可する必要があります。(Android SDK 1.6以降の場合)AndroidManifest.xmlを開き、<manifest>内に、以下のタグを追加してください。
<uses-permission
    android:name="android.permission.ACCESS_FINE_LOCATION" />
これで、GPSの情報にアクセス出来るようになります。続いて、プログラムでGPSを利用するための処理を作成します。

■LocationManagerとLocationListener

GPSの情報を利用するためには、「LocationManager」と「LocationListener」という2つのクラスが必要となります。LocationManagerは、位置情報を管理するための機能を提供するクラスです。そしてLocationListenerは、位置情報に関するイベントが発生したときの処理を行うためのイベントリスナーになります。

では、実際に簡単なサンプルを作成して、その使い方を見てみましょう(下のリストを参照)。これは、現在の位置情報を取得し、TextViewに表示する簡単なサンプルです。

※コンストラクタの処理

1.LocationManagerの取得
manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
コンストラクタでは、まずLocationManagerを取得します。これは「getSystemService」というメソッドを利用します。これは引数にサービスの種類を指定すると、それを利用するためのマネージャクラスを返すものです。これで「LOCATION_SERVICE」を指定することで、LocationManagerが得られます。

2.更新イベントの設定
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,this);
取得したLocationManagerの「requestLocationUpdates」を呼び出します。これは、位置情報が更新されるなどのイベントが発生した際のリクエストを処理するオブジェクトを設定するものです。

第1引数――プロバイダの指定。これはLocationManager.GPS_PROVIDERを指定します。
第2、3引数――リクエストの最小間隔(時間と位置)をそれぞれ指定します。これは、どちらもゼロでOKです。
第4引数――リクエストを受け付けるIntentを指定します。これはthisでよいでしょう。

3.LocationListenerの用意
第4引数で指定したIntentでは、更新イベントを処理するための「LocationListener」というインターフェイスをimplementsする必要があります。このクラスには、以下のメソッドを用意する必要があります。
public void onLocationChanged(Location loc)
public void onProviderDisabled(String arg0)
public void onProviderEnabled(String arg0)
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
これらは、それぞれ「位置情報の更新時」「ディスエーブル時」「イネーブル時」「ステータス更新時」に呼び出されます。

位置情報を利用する場合は、onLocationChangedメソッドを利用します。ここでは引数に「Location」というクラスのインスタンスが渡されます。これが、位置情報を管理するオブジェクトです。ここから位置の値を取り出せばいいのです。

4.Locationから位置の値を取得
double lat = loc.getLatitude();
double lgt = loc.getLongitude();
位置情報は、Locationの「getLatitude」「getLongitude」で得られます。それぞれdoubleの値として緯度・経度の値が取得されます。

ここでは、とりあえず取得した値を表示しているだけですが、例えばGoogle Mapsと連携して、表示位置を変更したりすれば、あっという間にGPS利用アプリが作れそうですね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※androidManifest.xmlに追記
<uses-permission
	android:name="android.permission.ACCESS_FINE_LOCATION" />

※SampleApp.javaのソースコード

package jp.tuyano;

import android.app.Activity;
import android.content.Context;
import android.location.*;
import android.os.Bundle;
import android.widget.TextView;

public class SampleApp extends Activity
		implements LocationListener {
	private LocationManager manager;
	private TextView text1;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		text1 = (TextView)this.findViewById(R.id.text);
		manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
		manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,this);
	}
	
	@Override
	public void onLocationChanged(Location loc) {
		double lat = loc.getLatitude();
		double lgt = loc.getLongitude();
		text1.setText("Lat: " + lat + "\nLgt: " + lgt);
	}

	@Override
	public void onProviderDisabled(String arg0) {}

	@Override
	public void onProviderEnabled(String arg0) {}

	@Override
	public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
	
}

※関連コンテンツ

「Google androidプログラミング入門」に戻る