Android onRequestPermissionsResult not working on my fragment
android, android-permissions
Solution
Remove this:
implements ActivityCompat.OnRequestPermissionsResultCallback
Fragment can itself handle `OnRequestPermissionsResultCallback` of Runtime permission:
use it like:
final int MyVersion = Build.VERSION.SDK_INT;
if (MyVersion > Build.VERSION_CODES.LOLLIPOP_MR1) {
if (!checkIfAlreadyhavePermission()) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE }, WRITE_EXTERNAL_STORAGE); //request permission
} else {
//call your method permision already granted
}
} else {
//call your method permission not needed for this version
}
private boolean checkIfAlreadyhavePermission() {
int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
return result == PackageManager.PERMISSION_GRANTED;
}
Now you can get the permission result in your `public void onRequestPermissionsResult()` inside your `Fragment`
using:
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case WRITE_EXTERNAL_STORAGE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "permission granted", Toast.LENGTH_LONG).show();
//call your action
} else {
Toast.makeText(getActivity(), "permission denied", Toast.LENGTH_LONG).show();
}
break;
}
}
}
Problem
in my fragment which that one of my activity pages, i would like to get permission from user and do some action after grant permission, but `onRequestPermissionsResult` not working and i don't see any log after granting permission ``` public class FragmentAboutUs extends Fragment implements ActivityCompat.OnRequestPermissionsResultCallback { private Activity activity; private Context context; ... private int WRITE_EXTERNAL_STORAGE = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_about_us, container, false); activity = getActivity(); context = getActivity().getBaseContext(); ... aboutUs = SQLite.select().from(AboutUs.class).querySingle(); if (aboutUs == null) { if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE); } else { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE); } } } return view; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == WRITE_EXTERNAL_STORAGE) { Log.e("permission granted"," OK"); } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } } ```