В моем многопроектном приложении MAUI я загружаю внешний URL-адрес с помощью WebView Maui, на этой странице есть возможность записи звука. Я создал собственный обработчик для этой функции, и он вызывается; однако я столкнулся с ошибкой разрешения.
Общий код проекта
public class WebPagewithMenuItem : ContentPage
{
public event EventHandler WfError;
public event EventHandler SessionTimeOut;
private static string title = "";
private static string hostUrl = "";
private readonly CustomWebView browser;
public WebPagewithMenuItem(string url, string token, string pageName, string hostUrlString, IPhoneFeatureService PhoneFeatureServiceValue)
{
browser = new CustomWebView();
title = pageName;
hostUrl = hostUrlString;
var html = setHtml(url, token);
PhoneFeatureService = PhoneFeatureServiceValue;
switch (DeviceInfo.Platform)
{
case var value when value == DevicePlatform.WinUI:
case var value when value == DevicePlatform.iOS:
default:
browser.Source = html;
browser.Navigating += Browser_Navigating;
browser.On().SetEnableZoomControls(true).SetDisplayZoomControls(true);
Content = browser;
break;
}
}
private void Browser_Navigating(object? sender, WebNavigatingEventArgs e)
{
var args = new DecisionHandlerDelegate();
args.Cancel = e.Cancel;
args.Uri = e.Url;
WebView_OnNavigationStarted(sender, args);
}
private HtmlWebViewSource setHtml(string url, string token)
{
var html = new HtmlWebViewSource
{
Html = @"
.loader {
border: 4px solid #f3f3f3;
border-radius: 50%;
border-top: 4px solid #3498db;
width: 40px;
height: 40px;
-webkit-animation: spin 2s linear infinite; /* Safari */
animation: spin 2s linear infinite;
position: absolute;
left: calc(50% - 20px);
top: calc(50% - 20px);
}
/* Safari */
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
document.getElementById('formIframe').submit();
"
};
return html;
}
}
Пользовательский веб-представление
public class CustomWebView : Microsoft.Maui.Controls.WebView
{
}
На стороне Android.....
public class CustomWebViewHandler : WebViewHandler
{
protected override void ConnectHandler(Android.Webkit.WebView platformView)
{
base.ConnectHandler(platformView);
// Enable JavaScript and configure other settings
platformView.Settings.JavaScriptEnabled = true;
platformView.Settings.DomStorageEnabled = true;
platformView.Settings.MediaPlaybackRequiresUserGesture = false;
platformView.SetWebChromeClient(new CustomWebChromeClient());
}
protected override void DisconnectHandler(Android.Webkit.WebView platformView)
{
platformView.SetWebChromeClient(null);
base.DisconnectHandler(platformView);
}
}
public class CustomWebChromeClient : WebChromeClient
{
public override void OnPermissionRequest(PermissionRequest request)
{
// Check if microphone access is included in the request
if (request.GetResources().Contains(PermissionRequest.ResourceAudioCapture))
{
request.Grant(request.GetResources());
}
else
{
base.OnPermissionRequest(request);
}
}
}
MainActivity.cs
protected async override void OnResume()
{
try
{
base.OnResume();
PermissionStatus status = await Permissions.CheckStatusAsync
();
if (status != PermissionStatus.Granted)
await Permissions.RequestAsync();
}
}
Зарегистрировано в MauiProgram на стороне Android
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseSharedMauiApp()
.ConfigureMauiHandlers((handlers) =>
{
handlers.AddHandler(typeof(CustomWebView), typeof(CustomWebViewHandler));
});
return builder.Build();
}
}
Я также добавил разрешения в AndroidManifest
Подробнее здесь: https://stackoverflow.com/questions/791 ... ui-android
Непойманный (в обещании) NotAllowedError: разрешение отклонено в MAUI Android ⇐ Android
Форум для тех, кто программирует под Android
1730355075
Anonymous
В моем многопроектном приложении MAUI я загружаю внешний URL-адрес с помощью WebView Maui, на этой странице есть возможность записи звука. Я создал собственный обработчик для этой функции, и он вызывается; однако я столкнулся с ошибкой разрешения.
Общий код проекта
public class WebPagewithMenuItem : ContentPage
{
public event EventHandler WfError;
public event EventHandler SessionTimeOut;
private static string title = "";
private static string hostUrl = "";
private readonly CustomWebView browser;
public WebPagewithMenuItem(string url, string token, string pageName, string hostUrlString, IPhoneFeatureService PhoneFeatureServiceValue)
{
browser = new CustomWebView();
title = pageName;
hostUrl = hostUrlString;
var html = setHtml(url, token);
PhoneFeatureService = PhoneFeatureServiceValue;
switch (DeviceInfo.Platform)
{
case var value when value == DevicePlatform.WinUI:
case var value when value == DevicePlatform.iOS:
default:
browser.Source = html;
browser.Navigating += Browser_Navigating;
browser.On().SetEnableZoomControls(true).SetDisplayZoomControls(true);
Content = browser;
break;
}
}
private void Browser_Navigating(object? sender, WebNavigatingEventArgs e)
{
var args = new DecisionHandlerDelegate();
args.Cancel = e.Cancel;
args.Uri = e.Url;
WebView_OnNavigationStarted(sender, args);
}
private HtmlWebViewSource setHtml(string url, string token)
{
var html = new HtmlWebViewSource
{
Html = @"
.loader {
border: 4px solid #f3f3f3;
border-radius: 50%;
border-top: 4px solid #3498db;
width: 40px;
height: 40px;
-webkit-animation: spin 2s linear infinite; /* Safari */
animation: spin 2s linear infinite;
position: absolute;
left: calc(50% - 20px);
top: calc(50% - 20px);
}
/* Safari */
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
document.getElementById('formIframe').submit();
"
};
return html;
}
}
Пользовательский веб-представление
public class CustomWebView : Microsoft.Maui.Controls.WebView
{
}
На стороне Android.....
public class CustomWebViewHandler : WebViewHandler
{
protected override void ConnectHandler(Android.Webkit.WebView platformView)
{
base.ConnectHandler(platformView);
// Enable JavaScript and configure other settings
platformView.Settings.JavaScriptEnabled = true;
platformView.Settings.DomStorageEnabled = true;
platformView.Settings.MediaPlaybackRequiresUserGesture = false;
platformView.SetWebChromeClient(new CustomWebChromeClient());
}
protected override void DisconnectHandler(Android.Webkit.WebView platformView)
{
platformView.SetWebChromeClient(null);
base.DisconnectHandler(platformView);
}
}
public class CustomWebChromeClient : WebChromeClient
{
public override void OnPermissionRequest(PermissionRequest request)
{
// Check if microphone access is included in the request
if (request.GetResources().Contains(PermissionRequest.ResourceAudioCapture))
{
request.Grant(request.GetResources());
}
else
{
base.OnPermissionRequest(request);
}
}
}
MainActivity.cs
protected async override void OnResume()
{
try
{
base.OnResume();
PermissionStatus status = await Permissions.CheckStatusAsync
();
if (status != PermissionStatus.Granted)
await Permissions.RequestAsync();
}
}
Зарегистрировано в MauiProgram на стороне Android
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseSharedMauiApp()
.ConfigureMauiHandlers((handlers) =>
{
handlers.AddHandler(typeof(CustomWebView), typeof(CustomWebViewHandler));
});
return builder.Build();
}
}
Я также добавил разрешения в AndroidManifest
Подробнее здесь: [url]https://stackoverflow.com/questions/79143651/uncaught-in-promise-notallowederror-permission-denied-in-maui-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия