#c# #xamarin #xamarin.android
#c# #xamarin #xamarin.android
Вопрос:
Я хочу получить идентификатор (int) для аудиофайла из папки ресурсов, но это выдает ошибку.
var File_Id = Resources.GetIdentifier("my_file.ogg","Assets", PackageName);
Приведенная выше строка кода выполняется в службе Android
это выдает ошибку,
Журнал ошибок:
03-13 14:03:50.047 W / ResourceType(13170): нет идентификатора пакета при получении значения для номера ресурса 0x00000000 Необработанное исключение: Android.Content.Res.Resources NotFoundException: идентификатор ресурса # 0x0
этот файл «my_file.ogg» находится в папке «Asset», для действия сборки установлено значение «AndroidAsset».
Ответ №1:
Ресурс может быть прочитан с помощью AssetsManager
. Попробуйте приведенный ниже фрагмент кода прочитать файл из ресурса.
Android.Content.Res.AssetFileDescriptor afd = this.Assets.OpenFd("File name");
Обновленный ответ :
Следующий фрагмент кода поможет воспроизвести медиафайл непосредственно из папки ресурсов.
Android.Content.Res.AssetFileDescriptor afd = this.Assets.OpenFd(fullPath);
if (afd != null )
{
player.SetDataSource (afd.FileDescriptor, afd.StartOffset, afd.Length);
player.Prepare ();
player.Start ();
}
Комментарии:
1. спасибо за ответ, но на самом деле мне нужен идентификатор ресурса, а не потока, потому что мне нужно передать его MediaPlayer. Создать (контекст, ресурсы. getIdentifier(«»f.mp3», «Assets», PackageName)), идентификатор может быть получен из Java.IO. Файлу нужен поток java, а не системный поток
2. forums.xamarin.com/discussion/6671/…
3. Проверьте эту ссылку. Это может вам помочь.
4. Большое спасибо man.code в ссылке помог мне, используя метод setDataSource (..) вместо настройки файла в MediaPlayer. Create(«»,»»»,pkgName)
Ответ №2:
В моем случае у меня был проект Xamarin Forms. Я включил ресурс в проект iOS, на который ссылалась страница xaml, но забыл включить его в проект Android.