Я пытаюсь создать ExoPlayer, используя код Android в .NET (MAUI), который визуализируется в TextView (а не в SurfaceView по умолчанию).
Справочная информация
В этой теме это обсуждается с точки зрения Android.
В .NET/MAUI у нас есть следующий конструктор, который применимо для ExoPlayer:
Код: Выделить всё
public unsafe StyledPlayerView (global::Android.Content.Context? context, global::Android.Util.IAttributeSet? attrs)Код: Выделить всё
var PlayerView = new StyledPlayerView(androidContext, attributes);
//presuming you have a working 'attributes' file...
По ссылке выше мы должны передать XML-файл, который сначала преобразуется в IAttributeSet объект, чтобы указать TextView в качестве целевой поверхности.
Приведен пример XML:
Код: Выделить всё
Код: Выделить всё
val xmlAttributes = context.resources.getXml(R.xml.player_view).let {
try {
it.next()
it.nextTag()
} catch (e: Exception) {
// do something, log, whatever
}
Xml.asAttributeSet(it)
}
Если я хочу полностью работать со сценарием C# и не хочу, чтобы XML-файлы загружались откуда угодно, а хочу просто объявить этот минимальный короткий фрагмент XML как строку или записать непосредственно в моем коде C#, могу ли я это сделать?
Могу ли я затем передать это в код для создания атрибута? Или, альтернативно, можем ли мы создать IAttributeSet для конструктора непосредственно на C#, даже не утруждаясь сначала созданием XML?
Моя лучшая попытка
Моя лучшая показанная попытка приводит к ошибке, которую я не понимаю.
В Visual Studio 2022, если таковая имеется:
- Файл > Создать > Приложение Android
- Добавьте ExoPlayer NuGet Xam.Plugins.Android.ExoPlayer
- Затем в MainActivity .cs, можно попробовать следующий код:
Код: Выделить всё
protected override void OnCreate(Bundle? savedInstanceState) {
base.OnCreate(savedInstanceState);
string xmlString =
"\n" +
"";
XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString));
xmlReader.Read();
System.Diagnostics.Debug.WriteLine("XML READER " + xmlReader.AttributeCount);
Android.Util.IAttributeSet attributes = Android.Util.Xml.AsAttributeSet(xmlReader);
System.Diagnostics.Debug.WriteLine("ATTRIBUTES " + attributes.AttributeCount);
Com.Google.Android.Exoplayer2.UI.StyledPlayerView styledPlayerView = new(this, attributes);
В Visual Studio при кодировании ошибок не выдается. Однако при его запуске очевидны две проблемы:
- Если вы попытаетесь отладить xmlReader с помощью следующего кода, появится сообщение **System. Xml.XmlException:** «android» — необъявленный префикс. Строка 2, позиция 52.':
Код: Выделить всё
while (xmlReader.Read()) {
switch (xmlReader.NodeType) {
case XmlNodeType.Element:
System.Diagnostics.Debug.WriteLine("", xmlReader.Name);
break;
case XmlNodeType.Text:
System.Diagnostics.Debug.WriteLine(xmlReader.Value);
break;
case XmlNodeType.CDATA:
System.Diagnostics.Debug.WriteLine("", xmlReader.Value);
break;
case XmlNodeType.ProcessingInstruction:
System.Diagnostics.Debug.WriteLine("", xmlReader.Name, xmlReader.Value);
break;
case XmlNodeType.Comment:
System.Diagnostics.Debug.WriteLine("", xmlReader.Value);
break;
case XmlNodeType.XmlDeclaration:
System.Diagnostics.Debug.WriteLine("");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
System.Diagnostics.Debug.WriteLine("
Подробнее здесь: [url]https://stackoverflow.com/questions/78446498/how-to-create-textureview-programmatically-with-exoplayer-in-net-maui[/url]
Мобильная версия