使用 Android 资产

资产提供了一种在应用程序中包括任意文件(例如文本、xml、字体、音乐和视频)的方法。 如果你尝试将这些文件包括为“资源”,则 Android 会将这些文件处理到其资源系统中,并且你无法获取原始数据。 如果你想访问原封未动的数据,则可使用“资产”来实现此目的。

添加到项目中的资产就像文件系统一样显示,你的应用程序可以使用 AssetManager 读取其中的数据。 在此简单演示中,我们将向项目中添加文本文件资产,使用 AssetManager 读取它,并在 TextView 中显示它。

向项目中添加资产

资产将进入你的项目的 Assets 文件夹中。 将一个名为 read_asset.txt 的新文本文件添加到此文件夹。 将一些文本放在该文件中,例如“我来自资产!”

Visual Studio 应当已将此文件的“生成操作”设置为“AndroidAsset”

Setting the build action to AndroidAsset

选择正确的“生成操作”可确保在编译时将文件打包为 APK。

读取资产

资产是使用 AssetManager 读取的。 可通过访问 Android.Content.Context(例如 Activity)上的 Assets 属性来获取 AssetManager 的实例。 在下面的代码中,我们将打开 read_asset.txt 资产,读取内容,并使用 TextView 显示它。

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    // Create a new TextView and set it as our view
    TextView tv = new TextView (this);
    
    // Read the contents of our asset
    string content;
    AssetManager assets = this.Assets;
    using (StreamReader sr = new StreamReader (assets.Open ("read_asset.txt")))
    {
        content = sr.ReadToEnd ();
    }

    // Set TextView.Text to our asset content
    tv.Text = content;
    SetContentView (tv);
}

读取二进制资产

以上示例中的 StreamReader 用法非常适合文本资产。 对于二进制资产,请使用以下代码:

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    // Read the contents of our asset
    const int maxReadSize = 256 * 1024;
    byte[] content;
    AssetManager assets = this.Assets;
    using (BinaryReader br = new BinaryReader (assets.Open ("mydatabase.db")))
    {
        content = br.ReadBytes (maxReadSize);
    }

    // Do something with it...

}

运行应用程序

运行该应用程序,应该会看到以下输出:

Example screenshot