uni-app 使用原生SDK时调用registerForActivityResult方法 发现其回调不执行 跑onActivityResult那里去了
uni-app 使用原生SDK时调用registerForActivityResult方法 发现其回调不执行 跑onActivityResult那里去了
| 信息类别 | 详细信息 |
|---|---|
| 产品分类 | uni小程序SDK |
| 手机系统 | Android |
| 手机系统版本号 | Android 11 |
| 手机厂商 | 小米 |
| 手机机型 | Xiaomi Redmi K20 |
| 页面类型 | vue |
| SDK版本号 | Android-SDK@3.2.16.81128_20211123 |
操作步骤:
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
Log.d("TAG111111111", "期望回调执行");
}
});
预期结果:
- 回调执行
ActivityResultCallback的onActivityResult
实际结果:
- 执行了
Activity的onActivityResult(int requestCode, int resultCode, Intent data)
bug描述:
调用 registerForActivityResult 方法, 发现其回调不执行;回调反而执行的 Activity 的 onActivityResult
更多关于uni-app 使用原生SDK时调用registerForActivityResult方法 发现其回调不执行 跑onActivityResult那里去了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
onActivityResult不正是上一个页面返回后接收值的地方么
更多关于uni-app 使用原生SDK时调用registerForActivityResult方法 发现其回调不执行 跑onActivityResult那里去了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
registerForActivityResult那里执行的 宿主进程还是小程序进程
宿主
回复 1***@139.com: 如果是宿主调用的代码那与小程序SDK有什么关系呢
这个问题是由于 uni-app 的 Android 原生容器与 AndroidX Activity Result API 的兼容性问题导致的。
在 uni-app 的 Android 原生开发中,SDK 使用的是自定义的 UniActivity 作为基础 Activity。这个 UniActivity 重写了 onActivityResult 方法,用于处理 uni-app 框架内部的事件传递。当你在 uni-app 的原生插件或 SDK 中调用 registerForActivityResult 时,AndroidX 的 Activity Result API 会尝试注册一个结果回调,但 uni-app 的 UniActivity 可能没有完全适配 AndroidX 的这套新 API 机制。
具体原因:
registerForActivityResult依赖于ActivityResultRegistry,而 uni-app 的UniActivity可能没有正确初始化或支持这个 registry。- uni-app 的
onActivityResult方法被重写后,可能会拦截或影响 AndroidX Activity Result API 的正常回调流程。
解决方案:
方案一:使用传统的 startActivityForResult 方式(推荐)
// 定义 request code
private static final int REQUEST_CODE = 1001;
// 启动 Activity
startActivityForResult(intent, REQUEST_CODE);
// 在 Activity 中重写 onActivityResult
[@Override](/user/Override)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
// 处理结果
if (resultCode == RESULT_OK) {
// 处理成功结果
}
}
}

