我已经编写了一个React Native模块来访问蓝牙设备。该设备拥有自己的Android和iOS SDK。在Android中,需要在Android Application onCreate方法期间调用特定的SDK函数。
从父应用程序调用此功能的正确方法是什么?是在库模块中创建一个可以由父应用程序调用的方法,还是导入库模块使用的JAR依赖项,而直接从父库中调用SDK的onCreate函数?
首先,我尝试从库模块构造函数中调用它,但是SDK需要一个应用程序对象,而不是一个应用程序上下文。
以下是模块的相关部分:
public MyLibraryModule(ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
SomeBluetoothManager.onApplicationCreate(reactContext);
}
由于我需要在onApplicationCreate
期间调用依赖SDK的onCreate
方法,因此我尝试直接在父应用程序中导入库:
import com.something.SomeBluetoothManager;
然后在React Native android应用的MainApplication.java
中:
@Override
public void onCreate() {
super.onCreate();
SomeBluetoothManager.onApplicationCreate(this);
}
这找不到蓝牙管理器类的导入。父React Native应用程序是否应该自动包含本机库模块中的所有库并使它们可用,以便我可以将其导入到应用程序中?
我在名为libs的文件夹中具有Bluetooth SDK jar文件和相关的.so文件,并将其添加到模块build.gradle
文件的相关部分:
android {
...
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
由于导入未找到要导入的子库,我最后的想法是在库模块类或库包类中创建静态方法:
public static void onCreate(Application app) {
SomeBluetoothManager.onApplicationCreate(app);
}
如果我将此静态调用添加到应用程序onCreate
覆盖方法中,该应用程序将在启动时崩溃:
@Override
public void onCreate() {
super.onCreate();
MyLibraryPackage.onCreate(this);
}
答案 0 :(得分:0)
您可以从ReactApplicationContext获得应用程序上下文,然后将应用程序上下文转换为一种应用程序类型:
Application app = (Application)reactContext.getApplicationContext();
SomeBluetoothManager.onApplicationCreate(app);
这似乎使我摆脱了使用该特定蓝牙库的障碍。