0

Here my Manifests snippet:

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

Here my fragment's snippet:

@Override
    public void onMapReady(GoogleMap googleMap) {
        this.googleMap = googleMap;
        setInfoWindowAdapter();
        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            this.googleMap.setMyLocationEnabled(true);
        } else {
            Toast.makeText(getActivity(), getString(R.string.no_permissions), Toast.LENGTH_LONG).show();
        }
    }

When I start in one Android 4.3 the map work fine. But if I start on Android 6.0 I get message (Toast) ` No permission

Alexei
  • 14,350
  • 37
  • 121
  • 240

2 Answers2

1

If you are testing your app on Android 6+ your code is working correct. You need to get runtime permission from user on Android 6+. Here is how you can do it:

    int permissionCheck = ContextCompat.checkSelfPermission(MapActivity.this,
            Manifest.permission.ACCESS_FINE_LOCATION);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(MapActivity.this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    } else {
          //permission is already granted
    }

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
    switch (requestCode) {
        case 1: {
            if (grantResults.length > 0) {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //granted
                } else {
                    //not granted
                }
            } else {
                //not granted
            }
        }
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
Amir_P
  • 8,322
  • 5
  • 43
  • 92
0

First : try to use this to request the permission :

 boolean permissionGranted = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
    if(permissionGranted) {
        // {Some Code}
    } else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 200);
    }

Second : implementation of OnRequestPermissionsResultCallback

...implements  ActivityCompat.OnRequestPermissionsResultCallback {

Third : override onRequestPermissionsResult method

 @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 200: {
                if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // {Some Code}
                }
            }
        }
    }
Nawrez
  • 3,314
  • 8
  • 28
  • 42