最初のステップでは、位置データを受信するための API を提供する Android プラグインを作成する必要があります。
プラグインの作成は非常に簡単で、
プラグイン開発ガイドとAndroid でのプラグインの開発 で説明されています。また、Cordova プラグインの作成例もここで見ることができます。
次に、ロケーション モニター クラスを作成します。シングルトンにして、メイン アクティビティから初期化できます。
これは、ニーズに合わせていくつかのソースと多くのテストからコンパイルした、単純ですが機能するコードです。主なコードはhereから取得しますが、可能な限り単純化しました。
public class LocationMonitor
{
private LocationListener locationListener = null;
private LocationManager locationManager = null;
private Location location = null;
public LocationMonitor()
{
}
public void startGPSActivity(Context context)
{
LocationLooper looper = new LocationLooper();
looper.start();
while (!looper.isReady())
{
}
looper.handler.post(new LocationBootstrapper(context));
}
public void stopGPSActivity()
{
locationManager.removeUpdates(locationListener);
}
public Location getLocation()
{
return location;
}
private class LocationLooper extends Thread
{
private Handler handler;
private LocationLooper()
{
}
public void run()
{
Looper.prepare();
this.handler = new Handler();
Looper.loop();
}
public boolean isReady()
{
return this.handler != null;
}
}
private class LocationBootstrapper implements Runnable
{
private Context context;
private LocationBootstrapper(Context context)
{
this.context = context;
}
public void run()
{
locationListener = new LocationListenerImpl();
locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1, locationListener);
}
}
private class LocationListenerImpl implements LocationListener
{
private LocationListenerImpl()
{
}
@Override
public void onLocationChanged(Location location)
{
LocationMonitor.this.location = location;
Log.i("LocationMonitor", "New location: lat= " + location.getLatitude() + " lng=" + location.getLongitude() + " acc=" + location.getAccuracy());
}
@Override
public void onProviderDisabled(String provider)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
}
}
プラグインから LocationMonitor クラスにアクセスすると、目的のソリューションが得られます。ページを変更しても GPS は再初期化されず、位置データは PhoneGap アプリで利用できます。
乾杯