【问题标题】:Get AssetManager without context在没有上下文的情况下获取 AssetManager
【发布时间】:2013-05-19 09:12:17
【问题描述】:

是否可以在没有上下文的情况下访问 AssetManager?我见过其他人的解决方案是扩展Application,并将Context保存在onCreate()中,并创建一个静态getter来返回Context。我觉得这真的很草率,并且破坏了封装,因为您现在已经将 Context 中的所有内容授予整个应用程序的访问权限。我想我可以将其减少为仅保存 AssetManager,但这仍然是一个非常棘手的修复。

我知道你可以通过调用类似的东西来访问没有上下文的资源

Resources.getSystem().getString()

但是,通过

访问 AssetManager
Resources.getSystem().getAssets()

仅授予您访问某些内置资产的权限,而不授予您资产文件夹中的实际内容。

我是否坚持使用 hacky Application 子类,还是有更清洁的方法?

【问题讨论】:

  • 为什么你认为保存应用程序上下文是草率的?你可以把它放在同一个类中,然后像任何其他单例一样调用 getInstance()...

标签: android android-assets android-context


【解决方案1】:

你需要资产做什么?只是为了打开文件?使用getResourceAsStream方法可以在没有上下文的情况下访问资源文件,但它们必须与java源文件放在同一文件夹中。

【讨论】:

  • 啊,我明白了。我使用 Assets 的原因是因为我正在开发一个游戏引擎,我的想法是将配置文件(所有游戏的内容)放入 assets 文件夹中,使引擎和内容分开。使用 assets/ 而不是 res/ 的原因是因为 assets 允许使用文件夹。游戏引擎相当复杂,因此将所有内容存储在一个文件夹中是不可行的。
  • 另外,我试图将 Android 特定的操作系统调用提取到顶层,以便我可以轻松地将引擎移植到任何具有 JVM 的操作系统,这就是为什么我可以t 将上下文作为参数传递。
猜你喜欢
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
相关资源
最近更新 更多