如果执着
如果执着
  • 发布:2020-05-18 19:39
  • 更新:2023-06-29 16:51
  • 阅读:4054

uniapp使用onActivityResult方法在开启新界面的时候就被调用,在原生代码处理完返回的时候却不再调用了

分类:uni-app

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方法

2020-05-18 19:39 负责人:无 分享
已邀请:

最佳回复

1***@qq.com

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

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

1***@qq.com

有没有大佬可以帮我看一下 我也是安卓传值回uniapp 怎么回调都拿不到值

  • 如果执着 (作者)

    在 onLoad() { } 中执行下面回复中的代码,再试试

    2020-10-23 11:15

如果执着

如果执着 (作者) - calm down

             // Android跳转到原生后的回调需要在此处理  
            if(uni.getSystemInfoSync().platform == 'android'){  
                plus.globalEvent.addEventListener('myScanEvent', function(e) {  
                    console.log('myScanEvent:'   JSON.stringify(e))  
                    var securitycode = e.result  
                    //  执行方法  
                     ......  

                });  
            }
  • 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

1***@qq.com

老哥 请教下,如果调用原生activity的话,activity的layout的xml文件要放到哪个目录

i***@qq.com

i***@qq.com

同样的需求,但是我不是用的插件的方式,直接调的外部APP,请问怎么拿到值?

要回复问题请先登录注册