Alexei
Alexei

Reputation: 15716

Can't handle click button Allow in permissions dialog in Fragment

Android Studio 3.4.

Here how I show permission dialog in Fragment:

private boolean checkAndRequestPermissions() {
    int internet = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.INTERNET);
    int loc = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION);
    int loc2 = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);
    List<String> listPermissionsNeeded = new ArrayList<>();
    if (internet != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.INTERNET);
    }
    if (loc != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION);
    }
    if (loc2 != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
    }
    if (BuildConfig.DEBUG)
        Log.d(TAG, "checkAndRequestPermissions_listPermissionsNeeded(" + listPermissionsNeeded.size() + ")");
    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 1);
        return false;
    }
    return true;
}

Here result:

enter image description here

Nice. But I need to handle click button Allow to do some specific operation.

Upvotes: 0

Views: 475

Answers (2)

Jimmy
Jimmy

Reputation: 96

As far I know there is no way to set an listener on that but you can check it the same way afterwards as you checked it before.

if (internet == PackageManager.PERMISSION_GRANTED) {
    //internet allowed
}
if (loc == PackageManager.PERMISSION_GRANTED) {
    //loc allowed
}
if (loc2 == PackageManager.PERMISSION_GRANTED) {
    //loc2 allowed
}

That should solve your problem.

Upvotes: 0

user1506104
user1506104

Reputation: 7106

You must override the onRequestPermissionsResult like so:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case 1: {
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // user pressed ALLOW

            } else {
                // user pressed DENY
            }
            return;
        }
    }
}

Upvotes: 1

Related Questions