【问题标题】:In Xamarin.Android getting resource id "Android.Content.Res.Resources+NotFoundException:" error occur在 Xamarin.Android 中获取资源 id "Android.Content.Res.Resources+NotFoundException:" 发生错误
【发布时间】:2020-06-08 13:06:41
【问题描述】:

我想从 Asset 文件夹中获取音频文件的 id(int),但它给了我错误。

var File_Id = Resources.GetIdentifier("my_file.ogg","Assets", PackageName);

上面的代码行在android Service中执行 它给出了错误,

错误日志:

03-13 14:03:50.047 W/ResourceType(13170):获取资源编号 0x00000000 的值时没有包标识符 未处理的异常: Android.Content.Res.Resources+NotFoundException:资源 ID #0x0

此文件“my_file.ogg”位于“Asset”文件夹中,构建操作设置为“AndroidAsset”

【问题讨论】:

    标签: c# xamarin xamarin.android


    【解决方案1】:

    可以使用AssetsManager 读取资产。试试下面的代码 sn-p 从资产中读取文件。

    Android.Content.Res.AssetFileDescriptor afd = this.Assets.OpenFd("File name");
    

    更新答案

    以下代码 sn-p 将有助于直接从 Asset 文件夹播放媒体文件。

    Android.Content.Res.AssetFileDescriptor afd = this.Assets.OpenFd(fullPath);
         if  (afd != null )
         {
             player.SetDataSource (afd.FileDescriptor, afd.StartOffset, afd.Length);
             player.Prepare ();
             player.Start ();
         }
    

    【讨论】:

    • 感谢您的回答,但实际上我需要资源的 id 而不是流,因为我需要将它传递给 MediaPlayer.Create(context,Resources.GetIdentifier(""f.mp3","Assets", PackageName )), id 可以从 Java.IO.File 获取它需要 java 流而不是系统流
    • 查看此链接。它可能会帮助你。
    • 非常感谢链接中的 man.code 帮助了我,同时使用 setDataSource(..) 方法而不是在 MediaPlayer.Create("","",pkgName) 中设置文件
    【解决方案2】:

    就我而言,我有一个 Xamarin Forms 项目。我在 xaml 页面所指的 iOS 项目中包含了一个资源,但忘记将其包含在 Android 项目中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-28
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多