Я следовал документам React Native https://facebook.github.io/react-native/docs/native-modules-android.html#callbacks, чтобы создать собственный модуль Android.
Чтобы предоставить метод JavaScript, метод Java должен быть аннотирован с помощью @ReactMethod. Возвращаемый тип методов моста всегда void. Собственный мост React является асинхронным, поэтому единственный способ передать результат в JavaScript - использовать обратные вызовы или отправлять события
public class TestBridge extends ReactContextBaseJavaModule {
public TestBridge(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "TestBridge";
}
@ReactMethod
public void getString(Callback stringCallback) {
stringCallback.invoke("Native module String");
}
}
и
public class TestBridgePackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new TestBridge(reactContext));
return modules;
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
вставить мой пакет в MainApplication
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
...
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new TestBridgePackage()
);
}
...
};
...
}
А затем получить строку на стороне React Native с обратным вызовом
import {NativeModules} from 'react-native';
export default class App extends Component<Props> {
componentWillMount() {
const TestBridge = NativeModules.TestBridge;
TestBridge.getString(string => console.log(string));
}
}