3

I'm developing an Android app with Xamarin and mvvmcross. For Android 6.0 I succeeded to ask runtime permissions, it is working well, but I do not have access to my MainActivity code so I don't know how to override the onRequestPermissionsResult callback, does anyone has a clue on how to do this?

Thank you

  • Alexander I have the same problem, did you manage to solve it? – Filipe Mota May 03 '16 at 15:16
  • 1
    I also wonder if either of you found an answer. I am using `Plugin.Permissions` but not Xamarin Forms. Just "native" Android in Xamarin. Did you find an Activity to override with the method you're asking about? – clay Aug 18 '16 at 21:48

3 Answers3

2

You can access the current Activity using the ActivityLifecycleCallbacks

James Montemagno has wrapped the API calls into one of his Xamarin.Plugins:

https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/CurrentActivity

In your Application subclass (MainApplication) you do some minor setup and then you have access to the Activity via the CrossCurrentActivity.Current property.

public override void OnCreate() { base.OnCreate();
   RegisterActivityLifecycleCallbacks(this); 
}

public override void OnTerminate() { 
  base.OnTerminate(); 
  UnregisterActivityLifecycleCallbacks(this); 
} 

public void OnActivityCreated(Activity activity, Bundle savedInstanceState) { 
   CrossCurrentActivity.Current.Activity = activity; 
} 

public void OnActivityResumed(Activity activity) { 
   CrossCurrentActivity.Current.Activity = activity; 
} 

Google Docs: Application.ActivityLifecycleCallbacks

SushiHangover
  • 73,120
  • 10
  • 106
  • 165
0

You can use Permissions Plugin for Xamarin to ask for permissions at runtime and get result.

var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);

if (status == PermissionStatus.Granted)
{
    //Permission was granted.
}
Giorgi
  • 30,270
  • 13
  • 89
  • 125
0

According to @Evk answer:

Most likely you use wrong Permission type (there are several types named Permission in different namespaces). Try this:

class Aplication : Android.App.Activity,
    Android.Support.V4.App.ActivityCompat.IOnRequestPermissionsResultCallback {

    public override async void OnRequestPermissionsResult(
        int requestCode,
        string[] permissions,
        Android.Content.PM.Permission[] grantResults
    ) {
    }
}
Community
  • 1
  • 1