現在の緯度と経度を返す別のクラス GPSTracker.java があります。
public class Live extends Activity implements LocationListener
{
GPSTracker gps;
Location newLocation = new Location(LocationManager.GPS_PROVIDER);
Location oldLocation = new Location(LocationManager.GPS_PROVIDER);
float distanceTravelled=0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_live);
startactivity();
}
開始アクティビティ:
public void startactivity()
{
gps = new GPSTracker(Live.this);
if(gps.canGetLocation())
{
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
Toast.makeText(getApplicationContext(), "Your Location is: \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
newLocation.setLatitude(latitude);
newLocation.setLongitude(longitude);
}
else
{
gps.showSettingsAlert();
}
}
コメントアウトされた部分を実行するたびに、Live クラスの startactivity() の外側で場所を宣言しても例外が発生します。それ以外の場合は、正しい緯度と経度が表示されます。
次のように、移動距離を計算するために使用したいと思います。
@Override
public void onLocationChanged(Location location)
{
oldLocation.set(newLocation);
startactivity();
distanceTravelled+=newLocation.distanceTo(oldLocation);
String stringdistance= Float.toString(distanceTravelled);
TextView distance = (TextView) findViewById(R.id.textDistance);
distance.setText(stringdistance);
}
そのロジックは正しいですか?
そして、onLocationChanged() は startactivity() で newLocation を見つけません。どうやってやるの?
しかし、最初に、startactivity() で場所を使用すると例外が発生します。