Android 获取无上下文的AssetManager

Android 获取无上下文的AssetManager,android,android-assets,android-context,Android,Android Assets,Android Context,是否可以在没有上下文的情况下访问AssetManager?我见过其他人的解决方案是扩展应用程序,并将上下文保存在onCreate()中,然后创建一个静态getter来返回上下文。我觉得这真的太草率了,破坏了封装,因为你现在已经为整个应用程序提供了访问上下文中所有内容的权限。我想我可以把它简化为只保存AssetManager,但这仍然是一个非常棘手的问题 我知道您可以通过调用以下命令在没有上下文的情况下访问资源 Resources.getSystem().getString() 但是,通过以下方

是否可以在没有上下文的情况下访问AssetManager?我见过其他人的解决方案是扩展应用程序,并将上下文保存在onCreate()中,然后创建一个静态getter来返回上下文。我觉得这真的太草率了,破坏了封装,因为你现在已经为整个应用程序提供了访问上下文中所有内容的权限。我想我可以把它简化为只保存AssetManager,但这仍然是一个非常棘手的问题

我知道您可以通过调用以下命令在没有上下文的情况下访问资源

Resources.getSystem().getString()
但是,通过以下方式访问AssetManager:

Resources.getSystem().getAssets()
只授予您访问某些内置资产的权限,而不是访问资产文件夹中的实际内容


我是被黑程序子类卡住了,还是有更干净的方法?

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

为什么您认为保存应用程序上下文很草率?您可以将它放在同一个类中,并像任何其他单例一样调用getInstance()。啊,我明白了。我使用资产的原因是因为我正在开发一个游戏引擎,其想法是将配置文件(游戏的所有内容)放到资产文件夹中,使引擎和内容分开。使用assets/over res/的原因是assets允许文件夹。游戏引擎相当复杂,因此将所有内容存储在单个文件夹中是不可行的。此外,我正试图将特定于Android的操作系统调用提取到顶层,这样我就可以很容易地将引擎移植到任何具有JVM的操作系统,这就是为什么我不能将上下文作为参数传递。