解决uniapp跳转原生页面,传递参数和接收参数。百分百可以!!!

uniapp跳转原生页面,传递参数和接收参数

看效果图: 本案例的入参数和出参数只打印。在这里插入图片描述在这里插入图片描述

在这里插入图片描述

前言网上查看了许多资料,有用下面方法调起原生页面传参的,但是回调的方法都是在一打开页面就执行了 也没返回什么数据。

 //获取宿主上下文
 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, "com.HBuilder.integrate.MainActivity");
  //开启新的任务栈 (跨进程)
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  //uni向android原生界面传值
  intent.putExtra("uni_key","来自uniapp的值");
    //请求码保证了,开始的新界面和返回的是同一个操作
  var CODE_REQUEST=1000
  //采用startActivityForResult开启新的界面,当界面关闭时可以处理返回结果, CODE_REQUEST请求码是唯一标识
  main.startActivityForResult(intent,CODE_REQUEST);
    //设置原生界面返回后的回调操作
  main.onActivityResult = function(requestCode, resultCode, data) {
                if (requestCode == CODE_REQUEST) {
                  alert(requestCode); //这个是正确的 1000  
                  alert(resultCode);  //始终都是0  
                  alert(data);  //弹出 undefined   
                }
      }
  }

通过研究官方的调用案例,我自己对方法进行了一些修改就可以传参和接受回调参数了

方法如下:

uniapp调用方法

<button type="primary" @click="selectImage()" style="width: 50%;margin-top: 20px;">选择图片</button>
selectImage(){
		const modal = uni.requireNativePlugin('modal');
		var SelectImage = uni.requireNativePlugin("SelectImage");
		SelectImage.select({'param': "{'max':'20','min':'1'}"},ret=>{
			modal.toast({
				message: ret,
				duration: 1.5
			});
		})
}

安卓方法原生

public class SelectImage extends UniModule {

    public static volatile UniJSCallback callback; //回调对象静态变量 回调的时候使用

    public static volatile String data; //获取uniapp的参数设置为静态变量


    /**
     * 跳转原生
     */
    @UniJSMethod(uiThread = true)
    public void select(JSONObject jsonObject, UniJSCallback callback){
        this.data = jsonObject.getString("param"); //获取uniapp的参数
        Toast.makeText(getApplication(), "param="+data, Toast.LENGTH_SHORT).show(); //打印
        this.callback = callback; //设置回调对象
        //打开原生安卓页面
        if(mUniSDKInstance != null && mUniSDKInstance.getContext() instanceof Activity) {
            Intent intent = new Intent(mUniSDKInstance.getContext(), AlbumActivity.class);
            ((Activity)mUniSDKInstance.getContext()).startActivityForResult(intent, 6000);
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == 6000 && data.hasExtra("resData")) {
            Log.e("SelectImage", "原生页面返回----" + data.getStringExtra("respond"));
            String ret = data.getStringExtra("resData");
            callback.invoke(ret);
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}
//用下面的步骤可以关闭页面 并返回数据执行uniapp回调方法
JSONObject jsonObject = new JSONObject();
jsonObject.put("data", resData);
Intent intent = new Intent();
intent.putExtra("resData", jsonObject.toJSONString());
setResult(6000, intent);
finish();
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科杰智能制造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值