是否可以在 Android 库项目中获取应用程序的上下文?

新手上路,请多包涵

我想在我的库项目的一个类中获取在运行时引用/托管我的库的应用程序的上下文。可能吗?如果是,如何?

谢谢

更新 我不希望我的用户将参数中的上下文传递给我的库项目,因为我的库项目可能会通过 JNI 调用,我不知道如何在 JNI 中获取上下文并将其传递给 Java 层。

原文由 Haris Hasan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
2 个回答

可能吗?

是的。

如果是,如何?

将其作为参数传入。

我不希望我的用户将参数中的上下文传递给我的库项目,因为我的库项目可能会通过 JNI 调用,而我不知道如何在 JNI 中获取上下文并将其传递给 Java 层。

然后弄清楚“[你]如何在 JNI 中获取上下文并将其传递给 Java 层”。我想你会像传递任何其他对象一样传递它。正如@Blundell 指出的那样,您实际上没有任何其他选择。

原文由 CommonsWare 发布,翻译遵循 CC BY-SA 3.0 许可协议

还有另一种方法,在您的库项目中添加应用程序类:

 /**
 * Base class for those who need to maintain global application state.
 */
public class LibApp extends Application {

  /** Instance of the current application. */
  private static LibApp instance;

  /**
   * Constructor.
   */
  public LibApp() {
    instance = this;
  }

  /**
   * Gets the application context.
   *
   * @return the application context
   */
  public static Context getContext() {
    return instance;
  }

}

然后在您的常规项目中使真正的应用程序类扩展 LibApp:

 /**
 * Base class for those who need to maintain global application state.
 */
public class App extends LibApp {

  @Override
  public void onCreate() {
    super.onCreate();
  }

}

确保您在 AndroidManifest 中定义了“名称”:

 <application android:name="App" ...>

并且您的 App 类在基础包中。

然后,您可以使用 LibApp.getContext() 您的库项目来获取正在使用该库的应用程序的应用程序上下文。

这可能不是好的解决方案,但对我有用。我分享它是因为它可能对其他人有用。

原文由 peceps 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题