注意:在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();
}
}