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();