PermissionsAndroid.request never resolves
See original GitHub issueIs this a bug report?
Yes
Have you read the Contributing Guidelines?
Yes.
Environment
Environment: OS: macOS Sierra 10.12.6 Node: 9.4.0 Yarn: 1.3.2 npm: 5.6.0 Watchman: 4.9.0 Xcode: Xcode 9.2 Build version 9C40b Android Studio: 3.0 AI-171.4443003
Packages: (wanted => installed) react: 16.2.0 => 16.2.0 react-native: 0.53.0 => 0.53.0
Edit: according to @MateRyze, it still happens on react-native 0.55.4.
Target Platform: Android 6.0.1
Steps to Reproduce
We have a Camera component and it should check for the Camera permission before mounting.
In my app’s AndroidManifest.xml I have the line, along with many other permissions:
<uses-permission android:name="android.permission.CAMERA"/>
In our component’s componentDidMount()
we call a function that should return true
if we have permission and false
if we do not have, here is the relevant snippet of the function:
if (Platform.OS === 'android') {
const isGranted = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.CAMERA);
if (isGranted) {
return true;
}
try {
console.log('before request');
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.CAMERA,
{
title: 'Dialog Title',
message: 'Dialog Message',
}
);
console.log('after request');
return granted === PermissionsAndroid.RESULTS.GRANTED;
} catch (err) {
console.log('error');
console.log(err);
}
}
Expected Behavior
A dialog with my title and message should appear, if the user clicks on “Allow”, the promise should resolve and my component should render as expected.
Actual Behavior
A dialog with a different message and title appears. I click on “Allow” and the promise is never resolved or rejected.
In my logs, only the “before request” log appears. Neitherconsole.log('after request')
or console.log('error')
is logged, so I presume the code is stuck in the await.
I am following this doc.
Issue Analytics
- State:
- Created 6 years ago
- Reactions:14
- Comments:40 (1 by maintainers)
Top GitHub Comments
Thanks for posting this! It looks like your issue may refer to an older version of React Native. Can you reproduce the issue on the latest release, v0.55?
Thank you for your contributions.
After debugging and trying a few cases. If the request is called with the
rationale
parameter asundefined
the request permissionworks correctly
. When therationale
object is provided permissions are not requested.