Приложение вылетает после запроса разрешения местоположения - PullRequest
0 голосов
/ 05 ноября 2018

Я знаю, что тот же вопрос задавался ранее, но я не смог найти хорошего ответа в моей ситуации. В основном, когда я нажимаю на действие, которое имеет текущее местоположение, приложение останавливается, а затем запрашивает разрешение. Когда я позволю это приложение продолжает работать отлично. Другое дело, я не получаю ошибку.

 SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    mService = Common.getGoogleAPIService();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
    {
        checkLocationPermission();
    }
}

private 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_PERMISSION_CODE);
        else
            ActivityCompat.requestPermissions(this,new String[]{

                    Manifest.permission.ACCESS_FINE_LOCATION

            },MY_PERMISSION_CODE);
        return false;
    }
    else
        return true;
}


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

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


}

private synchronized void buildGoogleApiClien()
{
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
    mGoogleApiClient.connect();
}

@Override
public void onConnected(@Nullable Bundle bundle) {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(1000);
    mLocationRequest.setFastestInterval(1000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
    {
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest,this);
    }
}

@Override
public void onConnectionSuspended(int i) {
    mGoogleApiClient.connect();
}

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

}

@Override
public void onLocationChanged(Location location) {


    mLastLocation = location;
    if (mMarker != null)

        mMarker.remove();

    latitude = location.getLatitude();
    longitude = location.getLongitude();

    LatLng latLng = new LatLng(latitude,longitude);
    MarkerOptions markerOptions = new MarkerOptions()
            .position(latLng);
         //   .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
  //  mMarker = mMap.addMarker(markerOptions);

1 Ответ

0 голосов
/ 05 ноября 2018

Добавление разрешения на размещение в файле AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
...