在PageRenderer(Xamarin.Android)

时间:2017-06-29 07:46:13

标签: android xamarin.android android-permissions

我有VideoCallPageRenderer,如下所示

VideoCallPageRenderer : PageRenderer, Android.Support.V4.App.ActivityCompat.IOnRequestPermissionsResultCallback
{
    public const int REQUEST_MIC = 0;

    protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
    {
          // Other codes
          RequestMicPermission();
    }

        public void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)
        {
            if (requestCode == REQUEST_MIC)
            {
                if (grantResults.Length == 1 && grantResults[0] == Permission.Granted)
                {

                }
            }
        }

    private void RequestMicPermission()
    {
        Android.Support.V4.App.ActivityCompat.RequestPermissions((Activity)Xamarin.Forms.Forms.Context, new string[] { Android.Manifest.Permission.RecordAudio }, REQUEST_MIC);
    }

}

这里RequestMicPermission工作正常,因为我可以看到弹出窗口要求获得许可。但是在我允许或拒绝OnRequestPermissionsResult之后没有被调用。

有任何帮助吗?试图在活动中覆盖它是非常困难的。

2 个答案:

答案 0 :(得分:1)

对于这里遇到问题的任何人,我都没有看到OnRequestPermissionsResult被调用。但是我连接了调试器,处理程序没有执行任何操作,即使断点有效,也从未受到攻击。

我终于进行了一次清理和重建,瞧,断点被击中了。

以防万一有人像我一样把头发扯掉:)。

答案 1 :(得分:0)

对于遇到此问题的未来读者,一个好的方法是抽象服务中的权限功能并将其注册到Xamarin Form的Dependencyservice。

您可以在渲染器或任何非活动类中解析此服务以使用它。还要在MainActivity中解析它,重写OnRequestPermissionsResult,并调用yourService.OnPermissionResult来传达结果。

正如Koushik所说,ActivityCompat.IOnRequestPermissionsResultCallback不起作用,因为我们在引用MainActivity时调用RequestPermissions,因此在此活动中获得了结果。

您可以在我的Github中看到一个实现示例:

GpsService

MainActivity