Search code examples
androidreact-nativeandroid-permissionsandroid-6.0-marshmallow

React Native - can't request location permissions using PermissionsAndroid


I am trying to request runtime location permissions but my promise keeps throwing this exception:

"Tried to use permissions API but the host Activity doesn't implement PermissionAwareActivity"

My code look like this:

  PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION)
  .then((preGranted) => {
    console.log('pre-granted', preGranted)
    if (!preGranted) {
      PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
        { 'title': 'Enable location', 'message': 'Boss said so..' }
      )
      .then((granted) => {
        if (granted) {
          console.log('GRANTED AFTER ASKING:', granted)
          debugger
        }
      })
    }
  })

In my manifest i have:

  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Has anyone come across that message? What is PermissionAwareActivity im having trouble finding anything about it online.


Solution

  • Note: This answer is based on Java instead of Reactive native. Please refer other answers for a React native specific solution

    What is PermissionAwareActivity

    PermissionAwareActivity is an interface which helps you to fetch run time permissions. You have to implement these methods in your own activity.

      public interface PermissionAwareActivity {
    
      int checkPermission(String permission, int pid, int uid);
    
    
      int checkSelfPermission(String permission);
    
      boolean shouldShowRequestPermissionRationale(String permission);
    
      void requestPermissions(String[] permissions, int requestCode, PermissionListener listener);
    }