Tommehh
Tommehh

Reputation: 946

onRequestPermissionsResult not called when user declined permission

I want to check all permissions on application startup with this code:

public void checkPermissions() {
    List<String> permissions = new ArrayList<>();

    permissions.add(Manifest.permission.INTERNET);
    permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
    permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);


    List<String> deniedPermissions = new ArrayList<>();

   for (String permission : permissions) {
       if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) {
            deniedPermissions.add(permission);
       }
   }

   if (deniedPermissions.size() > 0) {
       Activity activity = (Activity) context;
       ActivityCompat.requestPermissions(activity, deniedPermissions.toArray(new String[deniedPermissions.size()]), PERMISSIONS);
   }
}

If the user accepts the permission this code gets called:

 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case MainController.PERMISSIONS:
            boolean allPermissionsGranted = true;

            for (int grantResult : grantResults) {
                if (grantResult == PackageManager.PERMISSION_DENIED)
                    allPermissionsGranted = false;
            }

            if (!allPermissionsGranted) {
                View view = findViewById(R.id.content_main);
                Snackbar snackBar = Snackbar.make(view, "YOLO", Snackbar.LENGTH_LONG);
            }
            break;
    }
}

but if he declines, nothing happens and the onRequestPermissionsResult function never gets called.

Am I doing something wrong?

Upvotes: 0

Views: 258

Answers (1)

Tommehh
Tommehh

Reputation: 946

Ok I solved the problem by implementing the interface ActivityCompat.OnRequestPermissionsResultCallback

Upvotes: 2

Related Questions