В Xamarin.Android получает идентификатор ресурса «Android.Content.Res.Resources NotFoundException: «возникает ошибка

#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.