public class AppCameraModule extends UniModule {
private UniJSCallback cameraCallback;
@UniJSMethod
public void openCamera(JSONObject options, UniJSCallback callback) {
if (mUniSDKInstance != null) {
((Activity) mUniSDKInstance.getContext()).startActivityForResult(intent, 0);
}
// 有且仅有此处缓存callback,在一次完整openCamera的调用-回调过程中不会重复调用
cameraCallback = callback;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_TAKE_PHOTO_SUCCESS) {
// 日志上可以确定走了本if分支,并且cameraCallback 不为null
if (cameraCallback != null) {
Log.d(TAG, "cameraCallback = " + cameraCallback);
JSONObject result = new JSONObject();
String urls = data.getStringExtra("urls");
result.put("code", 0);
result.put("urls", JSONArray.parse(urls));
// 调用后JS层小概率未收到回调
cameraCallback.invoke(result);
cameraCallback = null;
}
} else if (resultCode == RESULT_SELECT_PHOTO_SUCCESS) {
// ...无关代码
} else {
// ...无关代码
}
}
}
- 发布:2023-10-18 09:25
- 更新:2023-11-27 10:00
- 阅读:444
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: Win10 22H2
HBuilderX类型: 正式
HBuilderX版本号: 3.8.12
手机系统: Android
手机系统版本号: Android 12
手机厂商: 华为
手机机型: P40
页面类型: vue
vue版本: vue2
打包方式: 离线
项目创建方式: HBuilderX
示例代码:
操作步骤:
操作流程:
- JS层调用UniModule原生方法
- 原生方法内调起原生Activity,UniModule缓存callback
- 原生Activity返回,UniModule中onActivityResult收到返回结果
- onActivityResult中调用callback.invoke()
- 小概率JS层并没有收到回调
操作流程:
- JS层调用UniModule原生方法
- 原生方法内调起原生Activity,UniModule缓存callback
- 原生Activity返回,UniModule中onActivityResult收到返回结果
- onActivityResult中调用callback.invoke()
- 小概率JS层并没有收到回调
预期结果:
正常回调JS层
正常回调JS层
实际结果:
JS层小概率收不到回调
JS层小概率收不到回调
bug描述:
操作流程:
- JS层调用UniModule原生方法
- 原生方法内调起原生Activity,UniModule缓存callback
- 原生Activity返回,UniModule中onActivityResult收到返回结果
- onActivityResult中调用callback.invoke()
- 小概率JS层并没有收到回调
1 个回复
wwwzzz
遇到同样的问题