私が取り組んでいた GPS RPG で比較的似たような問題が発生しました。
まず、場所が最初に見つかるまでに時間がかかる場合があります。場所が null かどうかのみを確認しているため、問題が発生する可能性があります。
何かを行う前に、デバイスの位置情報サービスが実際に有効になっていることを確認することもできます。
private boolean doLocationsCheck(){
if(!checkLocationEnabled()){
final CharSequence[] items = {"Yes", "No"};
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setCancelable(false);
builder.setTitle("Location must be enabled to play this game! Would you like to enable it now?");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
final int i = item;
runOnUiThread(new Runnable() {
public void run() {
if(i == 0){
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
quit();
}
else{
quit();
}
}
});
}
}).show();
AlertDialog alert = builder.create();
return false;
}
else {
return true;
}
}
private boolean checkLocationEnabled(){
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER) || service.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
return enabled;
}
プロバイダーが利用可能であることを確認したら、次のように接続をセットアップします。
private void setupLocation() {
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(final Location location) {
runOnUiThread(new Runnable() {
public void run() {
mLocation = location;
//Log.d(TAG, "Latitude: " + location.getLatitude() + " - Longitude: " + location.getLongitude());
saveLocation();
}
});
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
//Can set to GPS or network, whichever is available
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
場所は、更新されるたびにグローバル変数に設定され、設定に保存されます。このように、プロバイダーが有効になっているが、場所を取得するのに時間がかかる場合でも、ユーザーは、アプリが保存した最後の既知の場所でアプリケーションを引き続き使用できます (最初のプログラムには適用されません)。実行されます)。
私はそこに多くのことを残したことを知っていますが、それは自明であるか、以前の回答ですでに説明されているため、実際には必要ではないと考えました.
乾杯〜