javaandroidclassgoogle-api-clientandroid-fusedlocation

Problem with FusedLocationApi, it is deprecated


I've made a google maps app but it shuts down when I accept the permissions. All the code is okay but the onConnected method.

Here it is:

@Override
    public void onConnected(@Nullable Bundle bundle) { //La aplicacion busca la ubicación dentro de este metodo

        myLocationRequest = new LocationRequest();
        myLocationRequest.setInterval(1000); //La información de ubicación se recoge en itnervalos de 1000 milisegundos para no agotar demasiado rapido la bateria
        myLocationRequest.setFastestInterval(1000);

        myLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); //setPriority se utiliza para controlar el uso de la bateria
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            LocationServices.FusedLocationApi.requestLocationUpdates(myGoogleApiClient, myLocationRequest, this); //Busca la ubicación de locationrEquest
        }
    }

I guess that what is wrong is the FusedLocationApi.requestLocationUpdates because it says there is an error in there and the text is strikethrough. To be more accurate, it says 'FusedLocationapi' is deprecated, I don't know what this means. Any idea? It suggests to change the 3rd parameter to 'com.google.android.gms.location.LocationListener', but if I do so the app doesn't work properly. And if I accept the permission it suddenly shuts down.

I leave you the entire code here in case you needed to check anything:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {

    private GoogleMap mMap;
    Location myLastLocation; 
    LocationRequest myLocationRequest;
    GoogleApiClient myGoogleApiClient; 
    Marker myCurrLocationMarker; 

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

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            checkLocationPermission();
        }
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
        mapFragment.getMapAsync(this);
    }

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

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
                buildGoogleApiClient();
                mMap.setMyLocationEnabled(true); 
            }
        }
        else {
            buildGoogleApiClient();
            mMap.setMyLocationEnabled(true); 
        }
    }

    protected synchronized void buildGoogleApiClient(){
        myGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        myGoogleApiClient.connect();
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) { 

        myLocationRequest = new LocationRequest();
        myLocationRequest.setInterval(1000); 
        myLocationRequest.setFastestInterval(1000);

        myLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            LocationServices.FusedLocationApi.requestLocationUpdates(myGoogleApiClient, myLocationRequest, this); 
        }
    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onLocationChanged(Location location) { 

        myLastLocation = location; 
        if (myCurrLocationMarker != null) { 
            myCurrLocationMarker.remove();
        }

        LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());

        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(latLng); 
        markerOptions.title("My Position"); 

        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); 
        myCurrLocationMarker = mMap.addMarker(markerOptions); 

        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
        mMap.animateCamera(CameraUpdateFactory.zoomTo(11)); 

        if (myGoogleApiClient != null) {
            LocationServices.FusedLocationApi.removeLocationUpdates(myGoogleApiClient, this); 
        }
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }

    public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99;
    public boolean checkLocationPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.ACCESS_FINE_LOCATION)) {
                ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION);
            }

            else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION);
            }
            return false;
        }
        else {
            return true;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_LOCATION: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                        if (myGoogleApiClient == null) {
                            buildGoogleApiClient();
                        }
                        mMap.setMyLocationEnabled(true);
                    }
                }

                else {
                    Toast.makeText(this, "Permission not given.", Toast.LENGTH_LONG).show();
                }
                return;
            }
        }
    }
}

Thank you, and please tell me if you have any idea.


Solution

  • i think is something to do with imports, try to add com.google.android.gms.location.LocationListener, like this to your MapsActivity

    public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener {
    //
    }