m0_64382084 2022-08-02 14:40 采纳率: 40%
浏览 344
已结题

怎样 从android 原生跳转到 uniapp 登陆页面

正在开发一个app, 大部分代码是uniapp写的,其中一个功能块(暂时称 模块B)是用android写的,整个APP是把uni代码 本地打包后放进AS 中app assets目录下运行的。
现有一个问题,模块B需要分享功能,分享出去通过H5页面打开模块B,需要判断是否登陆,如果没有登陆则跳转到 登陆页面(登陆页面是用uniapp写的)。问题是怎样 从android 原生跳转到 uniapp 登陆页面 呢? 求解!!
  • 写回答

1条回答 默认 最新

  • 小P聊技术 2022-08-02 16:19
    关注

    注意:在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.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);
            }
        }
    
        
        private void toUniAppByParams(String params){
            ArrayList<IWebview> weblist = SDK.obtainAllIWebview("__UNI__3333333"); 
            for(int i = 0; i < weblist.size(); i ++){
                
                if(weblist.get(i).getOriginalUrl() != null){
                    JSUtil.execCallback(weblist.get(i),getIntent().getStringExtra("CallBackID"), params, JSUtil.OK,false);
                }
            }
            
            finish();
        }
    }` 
    
    ![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
    
    
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月19日
  • 创建了问题 8月2日