私のアプリでは、ユーザーの現在位置の緯度と経度の値が必要です。最初に、GPS 座標が使用可能かどうかを確認します。使用できない場合は、GPS 座標の取得に時間がかかるため、ネットワーク プロバイダーを使用してユーザーの位置の緯度経度値を取得します。GPS 座標が利用可能になったら、これらの値を取得する必要があります。約 2 日間グーグルで調べたところ、問題に関する情報が見つかり、以下に示すようにコードを作成できました。行き詰まり、前に進めません。
私の活動
public class MainActivity extends Activity {
double x, y;
Timer timer;
LocationManager lm;
boolean gps_enabled = false;
boolean network_enabled = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!gps_enabled && !network_enabled) {
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "nothing is enabled",
duration);
toast.show();
}
if (gps_enabled)
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
locationListenerGps);
if (network_enabled)
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
locationListenerNetwork);
timer = new Timer();
timer.schedule(new GetLastLocation(), 20000);
}
LocationListener locationListenerGps = new LocationListener() {
public void onLocationChanged(Location location) {
timer.cancel();
x = location.getLatitude();
y = location.getLongitude();
lm.removeUpdates(this);
lm.removeUpdates(locationListenerNetwork);
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context,
"gps enabled " + x + "\n" + y, duration);
toast.show();
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
timer.cancel();
x = location.getLatitude();
y = location.getLongitude();
lm.removeUpdates(this);
lm.removeUpdates(locationListenerGps);
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "network enabled" + x + "\n"
+ y, duration);
toast.show();
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
class GetLastLocation extends TimerTask {
@Override
public void run() {
lm.removeUpdates(locationListenerGps);
lm.removeUpdates(locationListenerNetwork);
Location net_loc = null, gps_loc = null;
if (gps_enabled)
gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
net_loc = lm
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
// if there are both values use the latest one
if (gps_loc != null && net_loc != null) {
if (gps_loc.getTime() > net_loc.getTime()) {
x = gps_loc.getLatitude();
y = gps_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "gps lastknown " + x
+ "\n" + y, duration);
toast.show();
} else {
x = net_loc.getLatitude();
y = net_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "network lastknown "
+ x + "\n" + y, duration);
toast.show();
}
}
if (gps_loc != null) {
{
x = gps_loc.getLatitude();
y = gps_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "gps lastknown " + x
+ "\n" + y, duration);
toast.show();
}
}
if (net_loc != null) {
{
x = net_loc.getLatitude();
y = net_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "network lastknown "
+ x + "\n" + y, duration);
toast.show();
}
}
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "no last know avilable",
duration);
toast.show();
}
}
}
これまでのところ、上記のコードを使用して、ネットワーク プロバイダーから緯度経度値を取得していますが、GPS 座標を取得できません。GPS 座標を取得するには、上記のコードに何を追加または編集する必要がありますか?