Commit dbaa8116 by amateur

1

1 parent 5b24f83e
package com.polysoft.nafmii.webview;
import android.app.Activity;
import android.text.TextUtils;
import com.alibaba.fastjson.JSONObject;
public class JsInterfaceHandler {
private Activity mActivity;
private JavaToJsinterface javaTojs;
private String jsMethodName;
public JsInterfaceHandler(Activity mActivity, JavaToJsinterface javaTojs) {
this.mActivity = mActivity;
this.javaTojs = javaTojs;
}
public void parse(String params, JsHandle jsHandle) {
try {
JSONObject obj = JSONObject.parseObject(params);
this.jsMethodName = obj.getString("jsMethodName");
JSONObject data = obj.getJSONObject("data");
jsHandle.handle(data, new JsInterfaceImpl());
} catch (Exception e) {
e.printStackTrace();
String error = String.format("接口调用异常");
this.sendMessage2Js(JsResult.fail(error).toString());
}
}
private void sendMessage2Js(String json) {
if (TextUtils.isEmpty(jsMethodName)) {
return;
}
if ("'main'".equals(Thread.currentThread().getName())) {
javaTojs.callJs(jsMethodName, json);
return;
}
this.mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
javaTojs.callJs(jsMethodName, json);
}
});
}
class JsInterfaceImpl implements JsInterface {
@Override
public void callJs(JsResult result) {
sendMessage2Js(result.toString());
}
@Override
public void success(Object obj) {
this.callJs(JsResult.success(obj));
}
@Override
public void fail(String statusText) {
this.callJs(JsResult.fail(statusText));
}
}
public interface JsHandle {
void handle(JSONObject data, JsInterface js);
}
public interface JsInterface {
void callJs(JsResult result);
void success(Object obj);
void fail(String statusText);
}
}
......@@ -21,7 +21,7 @@ public class JsResult {
private JsResult() {
}
private JsResult(String status, String statusText, Object data) {
public JsResult(String status, String statusText, Object data) {
this.status = status;
this.statusText = statusText;
this.data = data;
......
......@@ -2,7 +2,6 @@ package com.polysoft.nafmii.webview;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.text.TextUtils;
import android.webkit.JavascriptInterface;
......@@ -11,12 +10,11 @@ import androidx.fragment.app.Fragment;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.util.TypeUtils;
import com.polysoft.nafmii.broadcast.Receiver;
import com.polysoft.nafmii.broadcast.ReceiverListener;
import com.polysoft.nafmii.broadcast.ShareReceiver;
import com.polysoft.nafmii.utils.CtxUtils;
import com.polysoft.nafmii.utils.IntentUtils;
import com.polysoft.nafmii.utils.PermissionUtils;
import com.polysoft.nafmii.utils.StatusBarUtils;
import com.polysoft.nafmii.wechat.ShareBean;
import com.polysoft.nafmii.wechat.ShareResult;
......@@ -42,67 +40,76 @@ public class JsToJavaInterface {
@JavascriptInterface
public void nativeAppInfo(String params) {
String jsMethodName = null;
try {
JSONObject json = JSONObject.parseObject(params);
jsMethodName = json.getString("jsMethodName");
new JsInterfaceHandler(mActivity, javaTojs).parse(params, new JsInterfaceHandler.JsHandle() {
@Override
public void handle(JSONObject data, JsInterfaceHandler.JsInterface js) {
final Map<String, Object> dataMap = new HashMap<>();
PackageInfo packageInfo = CtxUtils.getPackageInfo();
dataMap.put("versionCode", packageInfo.versionCode);
dataMap.put("versionName", packageInfo.versionName);
dataMap.put("statusBarHeight", StatusBarUtils.getStatusBarHeight(this.mActivity));
this.sendMessage2Js(jsMethodName, JSON.toJSONString(dataMap));
}catch (Exception e) {
e.printStackTrace();
dataMap.put("statusBarHeight", StatusBarUtils.getStatusBarHeight(mActivity));
js.success(dataMap);
}
});
}
@JavascriptInterface
public void nativeMenu(String params) {
new JsInterfaceHandler(mActivity, javaTojs).parse(params, new JsInterfaceHandler.JsHandle() {
@Override
public void handle(JSONObject data, JsInterfaceHandler.JsInterface js) {
}
});
}
@JavascriptInterface
public void nativeLogin(String params) {
try{
final JSONObject json = JSONObject.parseObject(params);
final String jsMethodName = json.getString("jsMethodName");
final String data = json.getString("data");
} catch (Exception e) {
e.printStackTrace();
new JsInterfaceHandler(mActivity, javaTojs).parse(params, new JsInterfaceHandler.JsHandle() {
@Override
public void handle(JSONObject data, JsInterfaceHandler.JsInterface js) {
}
});
}
@JavascriptInterface
public void nativeShare(String params) {
final JSONObject json = JSONObject.parseObject(params);
final String jsMethodName = json.getString("jsMethodName");
this.mActivity.runOnUiThread(new Runnable() {
new JsInterfaceHandler(mActivity, javaTojs).parse(params, new JsInterfaceHandler.JsHandle() {
@Override
public void run() {
public void handle(JSONObject data, JsInterfaceHandler.JsInterface js) {
WechatApi instance = WechatApi.getInstance(mActivity);
if (!instance.isWXAppInstalled()) {
String dataJson = JSON.toJSONString(ShareResult.shareFail("未安装应用"));
javaTojs.callJs(jsMethodName, dataJson);
} else {
js.callJs(JsResult.fail("未安装应用"));
}
final Receiver<ShareResult> shareReceiver = ShareReceiver.getInstance(mActivity);
shareReceiver.addDefaultListener(new ReceiverListener<ShareResult>() {
@Override
public void onReceiverResult(String action, ShareResult data) {
javaTojs.callJs(jsMethodName, JSON.toJSONString(data));
public void onReceiverResult(String action, ShareResult share) {
js.callJs(new JsResult(share.getStatus(), share.getStatusText(), null));
shareReceiver.addDefaultListener(null);
}
});
instance.share(mActivity, json.getObject("data", ShareBean.class));
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
instance.share(mActivity, TypeUtils.castToJavaBean(data, ShareBean.class));
}
});
}
});
}
@JavascriptInterface
public void nativeCamera(String params) {
final JSONObject json = JSONObject.parseObject(params);
final String jsMethodName = json.getString("jsMethodName");
final JSONObject data = json.getJSONObject("data");
new JsInterfaceHandler(mActivity, javaTojs).parse(params, new JsInterfaceHandler.JsHandle() {
@Override
public void handle(JSONObject data, JsInterfaceHandler.JsInterface js) {
}
});
String permissions[] = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!