Когда мне нужно получить разрешение на хранение, у меня просто есть метод, такой как:
public boolean hasStoragePermission(Activity context, int requestCode){
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&&
ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, requestCode);
return false;
}
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&&
ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},requestCode);
return false;
}
return true;
}
Теперь я могу вызывать эту функцию всякий раз, когда мне нужно:
if(hasStoragePermission(context, requestCode){
//do the work
}
Нов случае местоположения:
public boolean hasPermission(){
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
&&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
return true;
}
И когда я это называю:
public void read(final LocationSetter locationSetter) {
if(!hasPermission()){return;}
flpClient = LocationServices.getFusedLocationProviderClient(this);
flpClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
locationSetter.processLocation(location);
}
});
}
Это говорит, что Call requires permission
.Это почему?