uniapp使用onActivityResult方法在开启新界面的时候就被调用,在原生代码处理完返回的时候却不再调用了。
前端代码:
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent(main.getIntent());
intent.setClassName(main, "com.xg.library.activity.CaptureActivity");
//uni向android原生界面传值
intent.putExtra("uni_key", "来自uniapp的值");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
var CODE_REQUEST = 1000
main.startActivityForResult(intent, CODE_REQUEST);
//设置原生界面返回后的回调操作
main.onActivityResult = function(requestCode, resultCode, data) {
// if (requestCode == CODE_REQUEST) {
// var tempdata = data.getStringExtra("respond");
// }
uni.showModal({
title: '提示',
content: 'requestCode:' + requestCode + ',resultCode:' + resultCode + ',data:' + data,
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
原生代码:CaptureActivity.java
Intent intent = new Intent();
intent.putExtra("respond", data);
setResult(1000, intent);
finish();
需求是 uniapp端使用原生的扫码组件 解析条形码后返回结果,但是当uniapp调起摄像头的同时,onActivityResult也已经回调了,当扫条形码得到结果后反而不执行onActivityResult方法
6 个回复
最佳回复
1***@qq.com
有没有大佬可以解答下,谢谢!原生安卓A程序调用uniapp B程序,uniapp B程序返回时传递参数给到A程序,这样写为什么会调用B程序不成功也传值不成功:
var main = plus.android.runtimeMainActivity();
//通过反射获取Android的Intent对象
var Intent = plus.android.importClass("android.content.Intent");
//通过宿主上下文创建 intent
var intent = new Intent(main.getIntent());
//设置要开启的Activity包类路径 com.HBuilder.integrate.MainActivity换掉你自己的界面
intent.setClassName(main, "A程序的MainActivity");
//开启新的任务栈 (跨进程)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//向原生界面传值操作
intent.putExtra("uni_key","来自uniapp的值");
// //开启新的界面
main.startActivity(intent);
DCloud_Android_ST
建议你使用原生插件来玩这个
如果执着 (作者)
请问原生插件的意思是什么,能提供下文档路径吗?
2020-05-20 18:11
DCloud_Android_ST
回复 如果执着: https://nativesupport.dcloud.net.cn/NativePlugin/README?id=%E7%AE%80%E4%BB%8B
2020-05-20 18:16
如果执着 (作者)
回复 DCloud_Android_ST: 我是用的这种方式开发的,但是原生中的onActivityResult方法拿到的数据怎么传递给前端呢
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE && data.hasExtra("respond")) {
Log.e("TestModule", "原生页面返回1----"+data.getStringExtra("respond"));
} else {
Log.e("TestModule", "原生页面返回2----");
super.onActivityResult(requestCode, resultCode, data);
}
}
2020-05-21 09:30
如果执着 (作者)
回复 DCloud_Android_ST: 我快翻遍了你们官方的文档了,包括你们的示例demo,好像都没有提到原生中的onActivityResult方法拿到的数据怎么传递给前端
2020-05-21 15:39
DCloud_Android_ST
回复 如果执着: https://nativesupport.dcloud.net.cn/NativePlugin/course/android?id=globalevent-%e4%ba%8b%e4%bb%b6 更新了globalevent-事件
2020-05-21 17:04
如果执着 (作者)
回复 DCloud_Android_ST: 解决了,十分感谢
2020-05-21 18:49
9***@qq.com
回复 如果执着:哥们我和你有同样的需求,请问你是怎么解决的呢?十分感谢
2020-06-02 13:46
如果执着 (作者)
回复 9***@qq.com:
原生代码在onActivityResul方法中得到结果后加上下面的代码:
Map<String,Object> params=new HashMap<>();
params.put("key","value");
mWXSDKInstance.fireGlobalEventCallback("myEvent", params);
前端代码onload或者onshow中加入以下代码:
var globalEvent = uni.requireNativePlugin('globalEvent');
globalEvent.addEventListener('myEvent', function(e) {
console.log('myEvent'+JSON.stringify(e));
});
我就是这样解决的,用的文档中的 globalevent-事件
2020-06-02 15:01
9***@qq.com
回复 如果执着: 好的,感谢,我是用这个方法解决的https://blog.csdn.net/Jiang_Rong_Tao/article/details/106048798
2020-06-03 09:14
9***@qq.com
回复 如果执着: 请问:我继承的是AppCompatActivity 该如何获取 mWXSDKInstance对象呢? 可以使用这种方法吗?
2020-08-22 19:23
如果执着 (作者)
回复 9***@qq.com: 可以的,官方文档里面是有写的,再详细看下文档
2020-08-25 16:01
l***@163.com
回复 如果执着: 没必要使用事件接收参数的,把UniJSCallback定义成全局的,在onActivityResult里面使用就可以了。
2022-01-13 10:46
siny
回复 l***@163.com: 前端如何写呢?
2022-04-18 17:09
i***@qq.com
请问不用插件的方式怎么解决?
2023-06-29 16:32
1***@qq.com
有没有大佬可以帮我看一下 我也是安卓传值回uniapp 怎么回调都拿不到值
如果执着 (作者)
在 onLoad() { } 中执行下面回复中的代码,再试试
2020-10-23 11:15
如果执着 (作者) - calm down
1***@qq.com
还是回调不到啊 大佬 -_-||
2020-10-23 11:50
如果执着 (作者)
回复 1***@qq.com: 你的原生代码是怎么传值的?
2020-10-23 14:27
1***@qq.com
回复 如果执着: 就是用个你上面那个方法 Map<String,Object> params=new HashMap<>();
params.put("key","value");
mWXSDKInstance.fireGlobalEventCallback("myEvent", params);
2020-10-23 14:36
1***@qq.com
onActivityResul都是在这个方法里写的
2020-10-23 14:37
1***@qq.com
老哥 请教下,如果调用原生activity的话,activity的layout的xml文件要放到哪个目录
i***@qq.com
同样的需求,但是我不是用的插件的方式,直接调的外部APP,请问怎么拿到值?