-2

i am trying to invoke the user to enable their write external storage permission at run time. i have used the below code. it shows the run time permission dialog. when i click allow or deny, it will doesn't call the onReqestPermissionResult (call back method) method.

what i have to do for that?

public class PermissionCheck extends Activity {

    private static final String TAG = "PermissionCheck";

    private Fragment mFragment;
    private Activity mActivity;

    public PermissionCheck(Fragment fragment){
        mFragment = fragment;
        mActivity = fragment.getActivity();
    }

    public boolean isStoragePermissionGranted() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                return true;
            } else {
                ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                return false;
            }
        }
        else {
            return true;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
            Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        }
    }
}
rafsanahmad007
  • 23,683
  • 6
  • 47
  • 62
Happy
  • 1,031
  • 10
  • 26
  • What is this PermissionCheck Activity? Where is onCreate and other lifecycle methods? Where is the UI? Why do you need an `Activity` just for Permissions? How you are actually calling this activity? – Mohammed Atif Mar 13 '17 at 08:58
  • i am not calling this activity... super.onRequestPermissionsResult(requestCode, permissions, grantResults); this needs to extends activity... thats why... – Happy Mar 13 '17 at 09:18

2 Answers2

1

You are passing another activity's instance in requestPermissions, so the onRequestPermissionResult is called in your mActivity and not in the PermissionCheck. Try changing requestPermissions to this :

ActivityCompat.requestPermissions(PermissionCheck.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
Nika Kurdadze
  • 2,502
  • 4
  • 18
  • 28
0

Replace:

ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

With :

 ActivityCompat.requestPermissions(PermissionCheck.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

And replace onRequestPermissionsResult() to this:

@Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1: {
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                  Toast.makeText(getActivity(), "Permission is granted", Toast.LENGTH_LONG).show();

                } else {
                    Toast.makeText(getActivity(), "Please give your permission.", Toast.LENGTH_LONG).show();
                }
                break;
            }
        }
    }
tahsinRupam
  • 6,325
  • 1
  • 18
  • 34