2017-01-31 12 views
0

Я хочу, чтобы переменная lat, lon использовалась снова, но когда я установил ее в onConnected(), она не установлена ​​в MainActivity. вот мой код,Невозможно сохранить широту и долготу в переменной

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 
    private static final int PERMISSION_ACCESS_FINE_LOCATION = 1; 
private GoogleApiClient googleApiClient; 
protected Context context; 
double lat, lon; 
TextView txtLat; 
double latitude = 0, longitude = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
      != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
       PERMISSION_ACCESS_FINE_LOCATION); 
    } 

    googleApiClient = new GoogleApiClient.Builder(this, this, this).addApi(LocationServices.API).build(); 


} 

и вот другая часть, которая включает в себя получить Lat долго.

@Override 
public void onConnected(Bundle bundle) { 
    Log.i(MainActivity.class.getSimpleName(), "Connected to Google Play Services!"); 

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) { 
     Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 

     lat = lastLocation.getLatitude(); 
     lon = lastLocation.getLongitude(); 
     txtLat = (TextView) findViewById(R.id.textView1); 
     txtLat.setText(lat + " " + lon); 
    } 

} 
+0

что 'double latitude = 0, longitude = 0;' this for это вы хотите снова использовать повторно? –

+0

@ ntaloventi no. Lat, lon –

ответ

1

Имея разрешение местоположение разрешено и иметь место позволило не то же самое (т.е. пользователь может разрешить разрешение местоположения, но местоположение не позволит так LastLocation может быть пустым) Вы можете, например:

LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
boolean gps_enabled = false; 
boolean network_enabled = false; 

gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

if (gps_enabled || network_enabled) { 
    LocationRequest mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(1000); 
    mLocationRequest.setFastestInterval(1001); 
    mLocationRequest.setNumUpdates(1); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    LocationServices.FusedLocationApi.requestLocationUpdates(GoogleClient, mLocationRequest, new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
        LocationServices.FusedLocationApi.removeLocationUpdates(GoogleClient, this); 
        lat = location.getLatitude(); 
        lon = location.getLongitude(); 
       } 
      }); 
     }