我有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
之后没有被调用。
有任何帮助吗?试图在活动中覆盖它是非常困难的。
答案 0 :(得分:1)
对于这里遇到问题的任何人,我都没有看到OnRequestPermissionsResult被调用。但是我连接了调试器,处理程序没有执行任何操作,即使断点有效,也从未受到攻击。
我终于进行了一次清理和重建,瞧,断点被击中了。
以防万一有人像我一样把头发扯掉:)。
答案 1 :(得分:0)
对于遇到此问题的未来读者,一个好的方法是抽象服务中的权限功能并将其注册到Xamarin Form的Dependencyservice。
您可以在渲染器或任何非活动类中解析此服务以使用它。还要在MainActivity中解析它,重写OnRequestPermissionsResult,并调用yourService.OnPermissionResult来传达结果。
正如Koushik所说,ActivityCompat.IOnRequestPermissionsResultCallback不起作用,因为我们在引用MainActivity时调用RequestPermissions,因此在此活动中获得了结果。
您可以在我的Github中看到一个实现示例: