Проблема с FusedLocationApi, устарела - PullRequest
0 голосов
/ 19 апреля 2020

Я создал приложение Google Maps, но оно закрывается, когда я принимаю разрешения. Весь код в порядке, но метод onConnected.

Вот он:

@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
        }
    }

Я предполагаю, что ошибочным является FusedLocationApi.requestLocationUpdates, потому что он говорит, что там есть ошибка и текст зачеркнут. Чтобы быть более точным, он говорит, что «FusedLocationapi» устарела, я не знаю, что это значит. Есть идеи? Он предлагает изменить третий параметр на com.google. android .gms.location.LocationListener, но если я сделаю это, приложение не будет работать должным образом. И если я принимаю разрешение, оно внезапно отключается.

Я оставляю вам весь код здесь на случай, если вам нужно будет что-то проверить:

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;
            }
        }
    }
}

Спасибо, и, пожалуйста, скажите мне, если вы есть идеи.

1 Ответ

1 голос
/ 19 апреля 2020

Я думаю, что это как-то связано с импортом, попробуйте добавить com.google. android .gms.location.LocationListener, например, к вашей MapsActivity

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener {
//
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...