Googleマップを使用し、現在の場所を表示する機能を備えたAndroidアプリがあります。「GPSをオンにしているのに現在地が出てこない」というご意見を多数いただいております。いくつかのデバイスで試してみましたが、問題は見られませんでしたが、昨日、以前は正常に機能していた電話でも問題に直面しました。
私が考え出した解決策は、現在の場所が表示されない場合、wi-fi をオフにしてモバイル インターネットを使用して現在の場所を取得すると、表示されるようになることです。少し奇妙に思えるかもしれませんが、私にとってはうまくいきました。何か不足している場合は、コードに必要な変更を提案してください。アプリ ユーザーに上記の回避策を提案することはできません。
locMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
boolean enabled = locMgr.isProviderEnabled(LocationManager.GPS_PROVIDER);
cEnabled = getIntent().getExtras().getBoolean("cEnabled");
if (!enabled && !cEnabled) {
AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
alt_bld.setMessage("Would you like to activate GPS?\n(recommended- Yes)")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = alt_bld.create();
// Title for AlertDialog
alert.setTitle("Activate GPS?");
// Icon for AlertDialog
alert.setIcon(R.drawable.location1);
alert.show();
}
ImageButton clocButton = (ImageButton) findViewById(R.id.cLoc);
clocButton.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
getToMyLocation();
return false;
}
});
private void getToMyLocation() {
mapView.invalidate();
Criteria criteria = new Criteria();
String provider = locMgr.getBestProvider(criteria, false);
Location lastLoc = locMgr.getLastKnownLocation(provider);
if(lastLoc != null) {
GeoPoint lastPoint = new GeoPoint((int)(lastLoc.getLatitude()*1E6), (int)(lastLoc.getLongitude()*1E6));
center = lastPoint;
showLocation(lastPoint);
}
else
{
Toast.makeText(mContext, "Waiting for current location", Toast.LENGTH_SHORT).show();
}
myLocOverlay.enableMyLocation();
myLocOverlay.runOnFirstFix(new Runnable() {
public void run() {
GeoPoint loc = myLocOverlay.getMyLocation();
mapView.getController().setCenter(loc);
center = loc;
}
});
}
private void showLocation(GeoPoint location) {
if (location != null) {
myLocOverlay.enableMyLocation();
mapView.getController().animateTo(location);
}
}
マニフェスト ファイルに次の権限を追加しました。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>