永眠人形と申します。
取得したGPSの現在地情報を用いて、GoogleMapを表示させる&現在地にアイコンを描画するプログラムを書いています。
プログラム内で位置情報が取得できない場合は、東京駅を初期値にして表示させるようにしています。
一度は確かにプログラムが正常に動き、現在地が表示されたのですが、
次の日以降は東京が表示されるだけで、現在地の表示が出来なくなってしまいました。
試行錯誤したのですが、原因がわからなかったので、質問させていただきました。
問題点や解決策がありましたら、ご教授くださればと思います。
MainActivity.java以外にPinItemizedOverlay.javaとPinOverlayItem.javaがありますが。
問題はどちらかというとMainActivityにあると思うので、そちらは割愛します。
よろしくお願いいたします。
[環境]
実機:Motorola XT701
androidバージョン:2.1 -update1
eclipse Juno
SDKはandroid-sdk_r18-windowsを利用しました。
[ソース]
■MainActivity.java
package com.example.androidmap;
import android.graphics.drawable.Drawable;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
public class MainActivity extends MapActivity {
final double DEG_RATE = 1E6;
private MapView map_mv;
private GeoPoint geoPoint;
MapController mapCntl;
private LocationManager mlManager;
private PinItemizedOverlay pinOverlay;
//東京の位置情報
final GeoPoint GEO_TOKYO_STA = new GeoPoint(35681980,139766092);
final int ZOOM_NORMAL = 16;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//地図作成
map_mv = (MapView)findViewById(R.id.MapView);
mapCntl = map_mv.getController();
mapCntl.setZoom(ZOOM_NORMAL);
//位置情報の取得
mlManager = (LocationManager) getSystemService(LOCATION_SERVICE);
//ピンアイコン取得
Drawable pin = getResources().getDrawable(R.drawable.star);
//ピンオーバーレイの作成
pinOverlay = new PinItemizedOverlay(pin);
//ピンオーバーレイをマップに追加
map_mv.getOverlays().add(pinOverlay);
}
public void onRestart() {
super.onRestart();
}
public void onStart() {
super.onStart();
}
@Override
public void onResume() {
super.onResume();
String provider = mlManager.getBestProvider(new Criteria(), true);
Location location = null;
if (provider != null) {
//最後の位置情報
location = mlManager.getLastKnownLocation(provider);
}
double lat = 0.0D;
double lng = 0.0D;
if (location != null) {
lat = location.getLatitude();
lng = location.getLongitude();
geoPoint = new GeoPoint((int)(lat * DEG_RATE),
(int)(lng * DEG_RATE));
//ピンの場所を決定する
pinOverlay.addPoint(geoPoint);
} else {
geoPoint = GEO_TOKYO_STA;
lat = geoPoint.getLatitudeE6() / DEG_RATE;
lng = geoPoint.getLongitudeE6() / DEG_RATE;
}
mapCntl.animateTo(geoPoint);
}
@Override
public void onPause() {
super.onPause();
}
public void onStop() {
super.onStop();
}
public void onDestroy() {
super.onDestroy();
}
@Override
protected boolean isRouteDisplayed() {
// TODO 自動生成されたメソッド・スタブ
return false;
}
}