安卓原生跳转uni-app页面并携带参数

16 篇文章 1 订阅
10 篇文章 0 订阅

注意:在android studio需配置好离线打包环境

uni-app端,将底下两个方法放入methods

        nativeJs(successCallback, errorCallback) {
		     return plus.bridge.exec("bridge", "goMainActivity", [plus.bridge.callbackId(typeof successCallback === 'function' ? successCallback : null, typeof errorCallback === 'function' ? errorCallback : null)]);
		 },
		// 打开锁选择
		openLockSelect(){
			// this.$refs.share.open();
			this.nativeJs(res => {
				  uni.showToast({
				  	title: res,
				  	icon: 'none',
				  	duration: 3000,
				  	mask: false
				  });
			  },
			  fail =>  {
				   
			  }); 
		},

android studio端

1.在dcloud_properties.xml添加(注意name与value的意思)

<feature name="bridge" value="com.coral3.helmet.raw.BridgeForUniApp"/>

2.BridgeForUniApp.java文件代码如下:

package com.coral3.helmet.raw;

import android.content.Intent;
import org.json.JSONArray;
import io.dcloud.common.DHInterface.IWebview;
import io.dcloud.common.DHInterface.StandardFeature;

public class BridgeForUniApp extends StandardFeature {
    public void goMainActivity(IWebview pWebview, JSONArray arr){
        Intent intent = new Intent(pWebview.getContext(), MainActivity.class);
        intent.putExtra("CallBackID", arr.optString(0));
        pWebview.getContext().startActivity(intent);
    }
}

3.MainActivity代码如下(注意核心方法toUniAppByParams)

package com.coral3.helmet.raw;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.coral3.helmet.R;
import java.util.ArrayList;
import io.dcloud.common.DHInterface.IWebview;
import io.dcloud.common.util.JSUtil;
import io.dcloud.feature.internal.sdk.SDK;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private TextView tvBack, openLockSuccess;
    private ImageView ivBtn;
    private View loadingView;
    private ViewGroup contentView;
    private Vibrator vibrator;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null) actionBar.hide();
        setContentView(R.layout.activity_main);
        initViews();
        initListener();
        startLoading();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            stopLoading();
                            openLockSuccess.setVisibility(View.VISIBLE);
                            Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT).show();
                            // 震动
                            vibrator.vibrate(2000);
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    private void initViews(){
        tvBack = findViewById(R.id.tv_back);
        ivBtn = findViewById(R.id.iv_back);
        openLockSuccess = findViewById(R.id.tv_lock_open_success);
        openLockSuccess.setVisibility(View.GONE);
        contentView = findViewById(android.R.id.content);
        vibrator = (Vibrator) MainActivity.this.getSystemService(Context.VIBRATOR_SERVICE);
    }

    private void initListener(){
        tvBack.setOnClickListener(this);
        ivBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        toUniAppByParams("lys");
    }

    public void startLoading() {
        if (loadingView == null) {
            loadingView = LayoutInflater.from(this).inflate(R.layout.view_loading, null, false);
            contentView.addView(loadingView);
            Log.d("yue-tag", "startLoading");
        } else {
            loadingView.setVisibility(View.VISIBLE);
        }
    }

    public void stopLoading() {
        if (loadingView != null) {
            loadingView.setVisibility(View.GONE);
        }
    }

    // 安卓原生调用uni-app
    private void toUniAppByParams(String params){
        ArrayList<IWebview> weblist = SDK.obtainAllIWebview("__UNI__3333333"); // 这个参数是uni-app项目appid
        for(int i = 0; i < weblist.size(); i ++){
            // 由于并不知是哪个webview,故对所有webview执行
            if(weblist.get(i).getOriginalUrl() != null){
                JSUtil.execCallback(weblist.get(i),getIntent().getStringExtra("CallBackID"), params, JSUtil.OK,false);
            }
        }
        // 返回webview对象
        finish();
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值