0

Я применяю FusedLocationProvider. Однако я достиг и получаю lat и long в одном действии, но теперь я пытаюсь реализовать его в отдельном классе неактивности GetLocationActivity и получить данные о местоположении в моем классе Maps_activity, когда я нажимаю кнопку, но я не могу получить данные!Как получить данные о местоположении из класса в активности карт в android?

Есть ли все-таки, чтобы получить данные из класса и показать его в моих действиях с картами? Я также попробовал sharedPref для сохранения данных в классе, но результата не было.

P.S: Я думаю, что GetLocationActivity не запускался, или я не могу его создать.

Вот код

Map_activity.java

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 
    private GoogleApiClient mGoogleApiClient; 
    private FloatingActionButton floatingActionButton; 
    private static final String LIST_FRAGMENT_TAG = "list_fragment"; 
    private static final String TAG = "list_fragment"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     floatingActionButton = (FloatingActionButton) findViewById(R.id.fab); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

     final GetLocationActivity obj = new GetLocationActivity(); 
     floatingActionButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       obj.GetLocation(); 

      } 
     }); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 

     // Add a marker in Karachi and move the camera 
     LatLng sydney = new LatLng(24.9217531, 66.8943302); 
     //mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Karachi")); 
     mMap.animateCamera(CameraUpdateFactory.zoomTo(10.75f)); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 

    } 

GetLocationActivity.java

public class GetLocationActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener , com.google.android.gms.location.LocationListener { 

    public final static String TAG = "Application"; 
    private GoogleApiClient mGoogleApiClient; 
    private Location mLastLocation; 
    private LocationRequest mLocationRequest; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .addApi(LocationServices.API) 
        .build(); 
     } 


    } 

    public void GetLocation() 
    { 
     try { 

      mLocationRequest = LocationRequest.create(); 
      mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
      mLocationRequest.setInterval(10000); // Update location every second 

      LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 

      mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
        mGoogleApiClient); 
      if (mLastLocation != null) { 


       Log.d(TAG, "onConnected: "+String.valueOf(mLastLocation.getLatitude())); 
       Log.d(TAG, "onConnected: "+String.valueOf(mLastLocation.getLongitude())); 

      } 
     } catch (SecurityException e) { 

     } 

    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
      GetLocation(); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     Toast.makeText(this, "onConnectionSuspended: " + String.valueOf(i), 
       Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Toast.makeText(this, "onConnectionFailed: " + connectionResult.toString(), 
       Toast.LENGTH_LONG).show(); 
    } 

    protected void onStart() { 
     mGoogleApiClient.connect(); 
     super.onStart(); 
    } 

    protected void onStop() { 
     mGoogleApiClient.disconnect(); 
     super.onStop(); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 

    } 
+1

это GetLocationActivity obj = new GetLocationActivity(); 'не будет работать, например oncreate не будет автоматически вызван, и не делайте этого, создайте простой класс' no extends things', переместите туда свою логику и используйте ее там, где когда-либо вы хотите –

+0

@PavneetSingh, но это заставляет меня запускать GoogleClient в классе, чтобы получить местоположение. Как я могу запустить другой класс? –

+0

да, вы должны передать контекст этому, ваш текущий подход не будет работать так, как вы хотите, вам также потребуется реализовать интерфейс связи между активностью и логикой местоположения. –

ответ

0

попробовать GetLocation() используя статический

public static void getLocation() { 
    ... 
} 

доступа, функционируют как этот

floatingActionButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     GetLocationActivity.getLocation(); 
    } 
}); 

, насколько я знаю, у нас нет доступа к нему с помощью объекта экземпляра, мы можем получить доступ к нему со статическим объектом. CMIIW.