[オリジナル]Android GPS(現在位置&GPS情報更新)


最近Androidアプリの開発をしていますが、やはり面白いです.実は携帯ゲームの開発ではなく、簡単な携帯電話アプリの開発だけをすれば、簡単です.主なコントロールをマスターすれば、簡単な応用を開発することができます.
以下、主にAndroidでGPS機能を使用することについて説明します.
GPS機能を開発する際、Google Mapに関連することが多いので、まずGoogle Mapについて説明する文章をお勧めします.
http://mobiforge.com/developing/story/using-google-maps-android
この記事では、AndroidでGoogle Mapのさまざまな機能をどのように使うかを詳しく説明しています.文章がとてもよくて、強くお勧めします.
このような文章を読んだ後、GPSの使い方を説明します.
まずAndroidManifestでxmlにロケーションサービス権限を追加するには、次の手順に従います.
   
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

次に、次のコード例を見ます.

LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location loc = locMan.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (loc != null) {
	lat = loc.getLatitude();
	Log.d(TAG, "latitude: " + lat);
	lng = loc.getLongitude();
	Log.d(TAG, "longitude: " + lng);
}

LocationManagerを登録してから、getLastKnownLocationにアクセスして現在のGPS座標を取得できます.簡単ではないでしょうか.
GPSである以上、私たちはもちろん現在の位置を知りたいだけでなく、位置の移動に伴ってGPS情報も更新しなければならない.どうすればいいのでしょうか?
まず、次のコード例を見てみましょう.

LocationListener locLis = new MyLocationListener();
locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10,
				locLis);
...
...
...
public class MyLocationListener implements LocationListener {
	@Override
	public void onLocationChanged(Location loc) {
		if (loc != null) {
			p = new GeoPoint((int) (loc.getLatitude() * 1E6),
					(int) (loc.getLongitude() * 1E6));
			mc.animateTo(p);
			mc.setZoom(14);
			mc.setCenter(p);
		}
	}

	@Override
	public void onProviderDisabled(String provider) {
	}

	@Override
	public void onProviderEnabled(String provider) {
	}

	@Override
	public void onStatusChanged(String provider, int status, Bundle extras) {
	}
}

自分のLocationListenerを宣言してrequestLocationUpdatesメソッドを呼び出すと、最新のGPS情報が得られます.
一般的な方法の説明:
public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
時間がminTime(単位:ミリ秒)を超える場合、または位置移動がminDistance(単位:メートル)を超える場合、listenerのメソッドを呼び出してGPS情報を更新します.
公式文書には次のような説明があります.
    1. minTimeの値は、より効率的で節電できるように、60000(すなわち、1分)未満であることが望ましい.
    2. GPS情報をできるだけリアルタイムで更新する場合は、minTimeとminDistanceの両方を0に設定します.
次の説明を参照してください.
    Registers the current activity to be notified periodically by the named provider. Periodically, the supplied LocationListener will be called with the current Location or with status updates.
    It may take a while to receive the most recent location. If an immediate location is required, applications may use the getLastKnownLocation(String) method.
    In case the provider is disabled by the user, updates will stop, and the onProviderDisabled(String) method will be called. As soon as the provider is enabled again, the onProviderEnabled(String) method will be called and location updates will start again.
    The frequency of notification may be controlled using the minTime and minDistance parameters. If minTime is greater than 0, the LocationManager could potentially rest for minTime milliseconds between location updates to conserve power. If minDistance is greater than 0, a location will only be broadcasted if the device moves by minDistance meters. To obtain notifications as frequently as possible, set both parameters to 0.
    Background services should be careful about setting a sufficiently high minTime so that the device doesn't consume too much power by keeping the GPS or wireless radios on all the time. In particular, values under 60000ms are not recommended.
    The calling thread must be a Looper thread such as the main thread of the calling Activity.