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 { ...@@ -21,7 +21,7 @@ public class JsResult {
private JsResult() { private JsResult() {
} }
private JsResult(String status, String statusText, Object data) { public JsResult(String status, String statusText, Object data) {
this.status = status; this.status = status;
this.statusText = statusText; this.statusText = statusText;
this.data = data; this.data = data;
......
...@@ -2,7 +2,6 @@ package com.polysoft.nafmii.webview; ...@@ -2,7 +2,6 @@ package com.polysoft.nafmii.webview;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.text.TextUtils; import android.text.TextUtils;
import android.webkit.JavascriptInterface; import android.webkit.JavascriptInterface;
...@@ -11,12 +10,11 @@ import androidx.fragment.app.Fragment; ...@@ -11,12 +10,11 @@ import androidx.fragment.app.Fragment;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.util.TypeUtils;
import com.polysoft.nafmii.broadcast.Receiver; import com.polysoft.nafmii.broadcast.Receiver;
import com.polysoft.nafmii.broadcast.ReceiverListener; import com.polysoft.nafmii.broadcast.ReceiverListener;
import com.polysoft.nafmii.broadcast.ShareReceiver; import com.polysoft.nafmii.broadcast.ShareReceiver;
import com.polysoft.nafmii.utils.CtxUtils; 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.utils.StatusBarUtils;
import com.polysoft.nafmii.wechat.ShareBean; import com.polysoft.nafmii.wechat.ShareBean;
import com.polysoft.nafmii.wechat.ShareResult; import com.polysoft.nafmii.wechat.ShareResult;
...@@ -42,67 +40,76 @@ public class JsToJavaInterface { ...@@ -42,67 +40,76 @@ public class JsToJavaInterface {
@JavascriptInterface @JavascriptInterface
public void nativeAppInfo(String params) { public void nativeAppInfo(String params) {
String jsMethodName = null; new JsInterfaceHandler(mActivity, javaTojs).parse(params, new JsInterfaceHandler.JsHandle() {
try { @Override
JSONObject json = JSONObject.parseObject(params); public void handle(JSONObject data, JsInterfaceHandler.JsInterface js) {
jsMethodName = json.getString("jsMethodName"); final Map<String, Object> dataMap = new HashMap<>();
PackageInfo packageInfo = CtxUtils.getPackageInfo();
final Map<String, Object> dataMap = new HashMap<>(); dataMap.put("versionCode", packageInfo.versionCode);
PackageInfo packageInfo = CtxUtils.getPackageInfo(); dataMap.put("versionName", packageInfo.versionName);
dataMap.put("versionCode", packageInfo.versionCode); dataMap.put("statusBarHeight", StatusBarUtils.getStatusBarHeight(mActivity));
dataMap.put("versionName", packageInfo.versionName); js.success(dataMap);
dataMap.put("statusBarHeight", StatusBarUtils.getStatusBarHeight(this.mActivity)); }
this.sendMessage2Js(jsMethodName, JSON.toJSONString(dataMap)); });
}catch (Exception e) { }
e.printStackTrace();
} @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 @JavascriptInterface
public void nativeLogin(String params) { public void nativeLogin(String params) {
try{ new JsInterfaceHandler(mActivity, javaTojs).parse(params, new JsInterfaceHandler.JsHandle() {
final JSONObject json = JSONObject.parseObject(params); @Override
final String jsMethodName = json.getString("jsMethodName"); public void handle(JSONObject data, JsInterfaceHandler.JsInterface js) {
final String data = json.getString("data");
} catch (Exception e) { }
e.printStackTrace(); });
}
} }
@JavascriptInterface @JavascriptInterface
public void nativeShare(String params) { public void nativeShare(String params) {
final JSONObject json = JSONObject.parseObject(params); new JsInterfaceHandler(mActivity, javaTojs).parse(params, new JsInterfaceHandler.JsHandle() {
final String jsMethodName = json.getString("jsMethodName");
this.mActivity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void handle(JSONObject data, JsInterfaceHandler.JsInterface js) {
WechatApi instance = WechatApi.getInstance(mActivity); WechatApi instance = WechatApi.getInstance(mActivity);
if (!instance.isWXAppInstalled()) { if (!instance.isWXAppInstalled()) {
String dataJson = JSON.toJSONString(ShareResult.shareFail("未安装应用")); js.callJs(JsResult.fail("未安装应用"));
javaTojs.callJs(jsMethodName, dataJson);
} else {
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));
shareReceiver.addDefaultListener(null);
}
});
instance.share(mActivity, json.getObject("data", ShareBean.class));
} }
final Receiver<ShareResult> shareReceiver = ShareReceiver.getInstance(mActivity);
shareReceiver.addDefaultListener(new ReceiverListener<ShareResult>() {
@Override
public void onReceiverResult(String action, ShareResult share) {
js.callJs(new JsResult(share.getStatus(), share.getStatusText(), null));
shareReceiver.addDefaultListener(null);
}
});
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
instance.share(mActivity, TypeUtils.castToJavaBean(data, ShareBean.class));
}
});
} }
}); });
} }
@JavascriptInterface @JavascriptInterface
public void nativeCamera(String params) { public void nativeCamera(String params) {
final JSONObject json = JSONObject.parseObject(params); new JsInterfaceHandler(mActivity, javaTojs).parse(params, new JsInterfaceHandler.JsHandle() {
final String jsMethodName = json.getString("jsMethodName"); @Override
final JSONObject data = json.getJSONObject("data"); public void handle(JSONObject data, JsInterfaceHandler.JsInterface js) {
}
});
String permissions[] = { String permissions[] = {
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_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!