我正在尝试为没有任何经验的霍尼韦尔CT50设备实施React Native Android模块。该模块将从设备上的内置激光扫描仪监听扫描。
我已经完成了React Native网站上的官方演练,并设法建立了一个基本模块,我可以在RN组件中接收一个简单的值。到目前为止,我的代码看起来像这样:
HoneywellCT50套餐:
public class HoneywellCT50Package implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new HoneywellCT50Module(reactContext));
return modules;
}
@Override
public List<Class<? extends JavaScriptModule>> createJSModules() {
return Collections.emptyList();
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
HoneywellCT50模块:
public class HoneywellCT50Module extends ReactContextBaseJavaModule {
private ReactApplicationContext reactContext;
private Callback successCallback;
public HoneywellCT50Module(ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
}
@ReactMethod
public void doSomething(
int a,
int b,
Callback successCallback
) {
boolean equal = a == b;
successCallback.invoke(equal);
}
@Override
public String getName() {
return "HoneywellCT50";
}
}
React Native Component(在componentDidMount中)
NativeModules.HoneywellCT50.doSomething(
5,
10,
(equal) => {
ToastAndroid.show(`Result: ${equal}`, ToastAndroid.LONG);
}
);
returns false
我正在努力理解如何将原生Android类(包含在.jar中)中的方法映射到React Native。我不是在寻找一个完整的解决方案,但如果有人能帮助解释我将如何开始使用以下内容,我将不胜感激:
Android类
public class MainActivity extends Activity implements BarcodeReader.BarcodeListener {
private AidcManager manager;
private BarcodeReader reader;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// create the AidcManager providing a Context and an
// CreatedCallback implementation.
AidcManager.create(this, new AidcManager.CreatedCallback() {
@Override
public void onCreated(AidcManager aidcManager) {
manager = aidcManager;
// use the manager to create a BarcodeReader with a session
// associated with the internal imager.
reader = manager.createBarcodeReader();
try {
// apply settings
reader.setProperty(BarcodeReader.PROPERTY_CODE_39_ENABLED, false);
reader.setProperty(BarcodeReader.PROPERTY_DATAMATRIX_ENABLED, true);
// set the trigger mode to automatic control
reader.setProperty(BarcodeReader.PROPERTY_TRIGGER_CONTROL_MODE,
BarcodeReader.TRIGGER_CONTROL_MODE_AUTO_CONTROL);
} catch (UnsupportedPropertyException e) {
Toast.makeText(MainActivity.this, "Failed to apply properties",
Toast.LENGTH_SHORT).show();
}
// register bar code event listener
reader.addBarcodeListener(MainActivity.this);
}
});
}
@Override
public void onResume() {
super.onResume();
if (reader != null) {
try {
reader.claim();
} catch (ScannerUnavailableException e) {
e.printStackTrace();
Toast.makeText(this, "Scanner unavailable", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onPause() {
super.onPause();
if (reader != null) {
// release the scanner claim so we don't get any scanner
// notifications while paused.
reader.release();
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (reader != null) {
// unregister barcode event listener
reader.removeBarcodeListener(this);
// close BarcodeReader to clean up resources.
// once closed, the object can no longer be used.
reader.close();
}
if (manager != null) {
// close AidcManager to disconnect from the scanner service.
// once closed, the object can no longer be used.
manager.close();
}
}
@Override
public void onBarcodeEvent(final BarcodeReadEvent event) {
runOnUiThread(new Runnable() {
@Override
public void run() {
String barcodeData = event.getBarcodeData();
String timestamp = event.getTimestamp();
// update UI to reflect the data
}
});
}
@Override
public void onFailureEvent(final BarcodeFailureEvent event) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "Barcode read failed",
Toast.LENGTH_SHORT).show();
}
});
}
}
非常感谢提前。
修改
我已经看过以下教程来达到这一点:
进一步编辑
在进一步了解之后,我发现了一个为此目的而开发的Cordova插件:
我确实考虑过使用React Native Cordova Bridge:
但不幸的是,这不再适用于我的应用程序的其他部分所需的最新版React Native(&lt; 0.29)。
我尝试过使用Cordova插件中的一些方法但是我没有足够的经验使用React Native / Cordova / Java来弄清楚如何使用它。
进一步解释我在寻找的内容:
我是否需要针对每种相应的霍尼韦尔方法使用ReactMethod?
我可以简单地为onBarcodeEvent创建一个ReactMethod吗?
我必须使用哪种React Bridge方法从扫描仪获取值?
答案 0 :(得分:1)
所以基本上,你需要将一些来自原生android组件的数据传递给react组件,是吗? 如果是这样,请看看这个答案:
带有工作解决方案的演示: