Путь к локальным файлам для Android Webview - PullRequest
1 голос
/ 21 февраля 2020

Я использую Xamarin Andorid Webview. Я кэшировал аудио файлы, и теперь я буду воспроизводить эти файлы через WhatsApp из Cache / Local, но я не знаю, какой путь я должен вставить в HTML источник звука.

html exmaple:

<audio _ngcontent-dgk-c22="">
   <source _ngcontent-dgk-c22="" src="/storage/emulated/0/**/**/**/02212020/54a1cfbf-d5be-45b0-8d22-377d760a7b7d.ogg" type="audio/ogg">
</audio>

в Xamarin доступ разрешен:

 if (this.Control != null)
        {
            this.Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
            this.Control.Settings.SetAppCacheEnabled(true);
            this.Control.Settings.DomStorageEnabled = true;
            this.Control.Settings.JavaScriptEnabled = true;
            this.Control.Settings.AllowFileAccess = true;
            this.Control.Settings.AllowFileAccessFromFileURLs = true;
            this.Control.Settings.AllowUniversalAccessFromFileURLs = true;
            this.Control.Settings.AllowContentAccess = true;

            this.Control.SetWebViewClient(new AndroidCustomWebViewClient(string.Format("javascript:{0}", JAVASCRIPTFUNCTION)));

            var chromeClient = new FileChooserWebChromeClient((uploadMsg, acceptType, capture) =>
            {
                MainActivity.UploadMessage = uploadMsg;
                switch (acceptType)
                {
                    case "image/*":
                        ((Activity)Forms.Context).StartActivityForResult(this.CreateChooserForImages(uploadMsg), FILECHOOSER_RESULTCODE);
                        //PermissionsSetting.Instance.SetPermissionsAsync(PermissionsTask.Camera | PermissionsTask.Microphone | PermissionsTask.Storage);
                        break;
                    default:
                        //PermissionsSetting.Instance.SetPermissionsAsync(PermissionsTask.Storage);
                        ((Activity)Forms.Context).StartActivityForResult(this.CreateGetContent(), FILECHOOSER_RESULTCODE);
                        break;
                }
            });

            this.Control.SetWebChromeClient(chromeClient);

1 Ответ

0 голосов
/ 04 марта 2020

Та же политика происхождения JavaScript ограничит вашу веб-страницу для загрузки данных из другого источника, в этом случае вызов webview.LoadData () с файлом: /// storage / ... в html не будет возможность загрузить изображение в локальной системе, так как изображение отличается от вашего html.

Чтобы избежать этого ограничения, вы можете использовать loadDataWithBaseURL () в соответствии с рекомендациями Google.

Вот пример:

string htmlStr = "<!DOCTYPE html><html><body>" +
                 "<h2> HTML Image </h2>" +
                 "<img src ='sample.png' alt = \"Trulli\" width = \"500\" height = \"333\">" +
                 "</body></html>";
string imageDir = "file:///data/user/0/com.companyname.webviewcachedemo/files/";
mWebview.LoadDataWithBaseURL(imageDir, htmlStr, "text/html", "UTF-8", null);

Надеюсь, это поможет .

...