首页 > 解决方案 > 以 webview xamarin 形式打开文件不起作用

问题描述

我已经使用 xamarin 表单在 webview 中实现了打开文件。它工作正常,当我点击打开文件文件对话框时我遇到的问题将打开,我可以在其中看到我的所有文件,如果我不选择任何东西并从手机点击后退按钮,打开文件将不再工作。如果我继续发送文件,它可以正常工作,但如果打开文件并且不选择任何图像并且只是返回打开的文件将无法再次工作。这是我的代码 MainActivity

 public void StartActivity(Intent intent, int requestCode, Action<int, Result, Intent> resultCallback)
        {
            this.resultCallbackvalue = resultCallback;
            StartActivityForResult(intent, requestCode);
        }

        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            if (this.resultCallbackvalue != null)
            {
                this.resultCallbackvalue(requestCode, resultCode, data);
                this.resultCallbackvalue = null;
            }
            //Platform.OnActivityResult(requestCode, resultCode, data);
        }

MyWebViewRenderer 类

public class MyWebClient : WebChromeClient
        {
            private static int filechooser = 1;
            private IValueCallback message;
            MainActivity mContext;
            public MyWebClient(MainActivity context)
            {
                this.mContext = context;
            }
            public override bool OnShowFileChooser(Android.Webkit.WebView webView, IValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)
            {
                this.message = filePathCallback;
                Intent chooserIntent = fileChooserParams.CreateIntent();
                chooserIntent.AddCategory(Intent.CategoryOpenable);
                this.mContext.StartActivity(Intent.CreateChooser(chooserIntent, "File Chooser"), filechooser, this.OnActivityResult);
                return true;
            }
            private void OnActivityResult(int requestCode, Result resultCode, Intent data)
            {
                if (data != null)
                {
                    if (requestCode == filechooser)
                    {
                        if (null == this.message)
                        {
                            return;
                        }

                        this.message.OnReceiveValue(WebChromeClient.FileChooserParams.ParseResult((int)resultCode, data));
                        this.message = null;
                    }
                }
            }
}

标签: xamarin.formswebview

解决方案


推荐阅读