我正在尝试为没有经验的霍尼韦尔CT50设备实施React Native Android模块。该模块将监听设备上内置激光扫描仪的扫描。
我已经在React本机站点上完成了正式的演练,我已经成功地设置了一个基本模块,可以在RN组件中接收到一个简单的值。到目前为止,我的代码如下所示:
霍尼韦尔CT50包装:
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();
}
}
霍尼韦尔CT50模块:
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(在组件中)
NativeModules.HoneywellCT50.doSomething(
5,
10,
(equal) => {
ToastAndroid.show(`Result: ${equal}`, ToastAndroid.LONG);
}
);
returns false
我正在努力理解现在如何将原生Android类(包含在.jar中)中的方法映射为原生的。我并不是在寻找一个完整的解决方案,但如果有人能帮助解释我将如何开始使用以下方法进行此操作,我将不胜感激:
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桥:
但不幸的是,这不再适用于最新版本的React Native(
我尝试过使用Cordova插件中的一些方法,但我对React-Native/Cordova/Java没有足够的经验来找出如何使其工作。
为了进一步解释我在寻找什么:
>
我是否需要每个相应的霍尼韦尔方法的ReactMethod?
我可以简单地为onBarcodeEvent创建一个ReactMethod吗?
我必须使用哪些反应桥方法从扫描仪中获取值?
所以基本上,你们需要从原生Android组件传递一些数据到react组件,是吗?如果是这样,请看以下答案:
以及带有工作解决方案的演示:
info JS服务器已在运行。安装应用程序的信息。。。 任务:@react-native-community_datetimepicker:compiledBugJavaWithJavaC 任务:react-nate-fbsdk: compileDebugJavaBackJavac 任务:反应本机手势处理程序:CompiledBugJavaWithJavaC 任务:反应本机映射:CompiledB
我正在设置环境,开始开发react原生应用程序。我不断发现以下错误: PS C:\map\development\learnreact\react native\helloworld 配置项目:应用程序在不一致的位置“C:\Users\bheka\AppData\Local\Android\Sdk\platform tools”(预期为“C:\Users\bheka\AppData\Local\A
当我想运行反应-本机运行-Android命令我看到 失败:构建失败,有一个异常。 > 哪里出错了:配置根项目'reactNativeCliTest'时出现问题。 无法解析配置“:classpath”的所有依赖项。无法下载gradle core。jar(com.android.tools.build:gradle-core:2.2.3)无法获取资源的https://jcenter.bintray.c
失败:生成失败,出现异常。 > 错误:任务“:app:installdebug”执行失败。 com.android.builder.testing.api.deviceException:没有连接的设备! 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。使用--scan运行以获得完整的见解。 请访问https://help.gr
问题内容: 我正在React Native中开发一个需要使用Web Map Services的移动应用程序。我尚未找到任何允许同时使用WMS并进行本机响应的库或框架。在React(Web)中,我找到了一个。我的问题是: 您是否知道是否存在允许我使用WMS和React Native的任何库或框架,或者是否有可能在React native中集成React(web)库? 谢谢! 问题答案: 我决定使用的
我将安装Android studio并在其上运行react native,但它是否仍能为我提供iOS apk!?我听说我们不需要为iOS重写react本机代码。