下面列出了怎么用android.webkit.JavascriptInterface的API类实例代码及写法,或者点击链接到github查看源代码。
@JavascriptInterface
public void onFinish(String name, String obj) {
name = name.replace(" ", "");
// 检测是否有重复的
List<MapConfigBean> list = LitePal.select("*")
.where("name=?", name)
.find(MapConfigBean.class);
for (MapConfigBean b : list) {
b.delete();
}
MapConfigBean bean = new MapConfigBean();
bean.name = name;
bean.data = obj;
bean.save();
callBack.onFinish(null);
}
@Deprecated
@JavascriptInterface
public void detectPaymentMethod(String jsParams) {
VenvyLog.i("支付宝==" + jsParams);
try {
JSONObject json = new JSONObject(jsParams);
JSONObject msg = json.optJSONObject("msg");
JSONObject data = msg.optJSONObject("data");
boolean result = goPay(data.optString("url"));
String jsData = result ? "true" : "fasle";
callJsFunction(jsData, jsParams);
} catch (Exception e) {
e.printStackTrace();
}
}
@android.webkit.JavascriptInterface
public void openUrl(final String url) {
new MaterialDialog.Builder(activity)
.title("即将前往")
.content("点击「确定」将会访问该链接地址")
.positiveText("确定")
.negativeText("取消")
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
WebViewUtil.openLink(url, (Activity) activity);
}
})
.show();
}
@JavascriptInterface
public void signTransaction(
int callbackId,
String recipient,
String value,
String nonce,
String gasLimit,
String gasPrice,
String payload) {
if (value.equals("undefined")) value = "0";
if (gasPrice == null) gasPrice = "0";
Web3Transaction transaction = new Web3Transaction(
TextUtils.isEmpty(recipient) ? Address.EMPTY : new Address(recipient),
null,
Hex.hexToBigInteger(value),
Hex.hexToBigInteger(gasPrice, BigInteger.ZERO),
Hex.hexToBigInteger(gasLimit, BigInteger.ZERO),
Hex.hexToLong(nonce, -1),
payload,
callbackId);
webView.post(() -> onSignTransactionListener.onSignTransaction(transaction, getUrl()));
}
/**
* 提供隐藏webview弹窗的服务 from native
*/
@JavascriptInterface
public void hidePopLayer() {
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.setVisibility(View.GONE);
PopManager.getInstance(mWebView.getContext()).onPopDimiss();
mWebView.stopLoading();
mWebView.clearHistory();
mWebView.clearCache(true);
mWebView.loadUrl("about:blank");
mWebView.pauseTimers();
mWebView = null;
}
});
}
@JavascriptInterface
public void postEvent(final String eventName, final String eventData) {
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
if (getParentActivity() == null) {
return;
}
if (BuildVars.LOGS_ENABLED) {
FileLog.d(eventName);
}
switch (eventName) {
case "share_game":
currentMessageObject.messageOwner.with_my_score = false;
break;
case "share_score":
currentMessageObject.messageOwner.with_my_score = true;
break;
}
showDialog(ShareAlert.createShareAlert(getParentActivity(), currentMessageObject, null, false, linkToCopy, false));
}
});
}
@JavascriptInterface
public void getDiffData2(final String jsCallbackFunc) {
if (null != sessionClient) {
sessionClient.getDiffData(new SonicDiffDataCallback() {
@Override
public void callback(final String resultData) {
Runnable callbackRunnable = new Runnable() {
@Override
public void run() {
String jsCode = "javascript:" + jsCallbackFunc + "('"+ toJsString(resultData) + "')";
sessionClient.getWebView().loadUrl(jsCode);
}
};
if (Looper.getMainLooper() == Looper.myLooper()) {
callbackRunnable.run();
} else {
new Handler(Looper.getMainLooper()).post(callbackRunnable);
}
}
});
}
}
@JavascriptInterface
public void setUserInfo(String jsParams) {
VenvyLog.i("---userInfo--" + jsParams);
try {
JSONObject json = new JSONObject(jsParams);
JSONObject user = json.optJSONObject("msg");
PlatformUserInfo platformUserInfo = new PlatformUserInfo();
platformUserInfo.setPhoneNum(user.optString("phone"));
platformUserInfo.setUserToken(user.optString("token"));
platformUserInfo.setUserName(user.optString("userName"));
platformUserInfo.setNickName(user.optString("nickName"));
platformUserInfo.setUid(user.optString("uid"));
if (mPlatformLoginInterface != null) {
mPlatformLoginInterface.userLogined(platformUserInfo);
}
//todo
} catch (JSONException e) {
}
}
@JavascriptInterface
public void postEvent(final String eventName, final String eventData) {
AndroidUtilities.runOnUIThread(() -> {
if (getParentActivity() == null) {
return;
}
if (eventName.equals("payment_form_submit")) {
try {
JSONObject jsonObject = new JSONObject(eventData);
JSONObject response = jsonObject.getJSONObject("credentials");
paymentJson = response.toString();
cardName = jsonObject.getString("title");
} catch (Throwable e) {
paymentJson = eventData;
FileLog.e(e);
}
goToNextStep();
}
});
}
@JavascriptInterface
public void postEvent(final String eventName, final String eventData) {
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
switch (eventName) {
case "loaded":
progressBar.setVisibility(View.INVISIBLE);
progressBarBlackBackground.setVisibility(View.INVISIBLE);
pipButton.setEnabled(true);
pipButton.setAlpha(1.0f);
showOrHideYoutubeLogo(false);
break;
}
}
});
}
/**
* 与js交互时用到的方法,在js里直接调用
*/
@JavascriptInterface
public void fromHtml(final String type, final String json) {
Log.i(TAG, "fromHtml: [type: " + type + "; json:" + json + "]");
switch (type) {
case Constant.HtmlType.OPEN_NEW_LINK:
OpenNewLink openNewLink = mGson.fromJson(json, OpenNewLink.class);
if (openNewLink.isNeedLogin()) {
if (UserCache.isEmpty()) {
LoginActivity.startActivity(mContext.get(), null);
return;
}
}
String navigationLink = openNewLink.getNavigationLink();
TyUtils.handleWebViewLink(mContext.get(), navigationLink);
break;
}
}
@JavascriptInterface
public void registerAnchor(final String requestId, final float[] matrix) {
if (requestId == null || matrix == null) {
return;
}
mSurfaceView.queueEvent(new Runnable() {
@Override
public void run() {
Pose anchorPose = Pose.makeTranslation(matrix[12], matrix[13], matrix[14]);
Anchor anchor = mSession.createAnchor(anchorPose);
final String scriptString = "ARCoreBridge.registerAnchorResponse('" + requestId + "', '" + String.valueOf(anchor.hashCode()) + "');";
evaluateWebViewJavascript(scriptString);
}
});
}
@JavascriptInterface
public void signTransaction(
int callbackId,
String recipient,
String value,
String nonce,
String gasLimit,
String gasPrice,
String payload) {
Transaction transaction = new Transaction(
TextUtils.isEmpty(recipient) ? Address.EMPTY : new Address(recipient),
null,
Hex.hexToBigInteger(value),
Hex.hexToBigInteger(gasPrice, BigInteger.ZERO),
Hex.hexToLong(gasLimit, 0),
Hex.hexToLong(nonce, -1),
payload,
callbackId);
onSignTransactionListener.onSignTransaction(transaction);
}
@JavascriptInterface
public void onVideoDiscovered() {
handler.post(new Runnable() {
@Override
public void run() {
callbacks.onVideoElementDiscovered();
}
});
}
@JavascriptInterface
public String onPathDel(String taskName) {
List<MapConfigBean> list = LitePal
.where("name=?", taskName)
.limit(1)
.find(MapConfigBean.class);
for (MapConfigBean bean : list) {
bean.delete();
}
return onRefresh();
}
@JavascriptInterface
public void onPathEdit(String taskName) {
Intent intent = new Intent(App.getContext(), HtmlActivity.class);
intent.putExtra("type", HtmlActivity.HTML_MAP);
intent.putExtra("name", taskName);
intent.putExtra("config", "");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
App.getContext().startActivity(intent);
}
@JavascriptInterface
public void onAddPath() {
Intent intent = new Intent(App.getContext(), HtmlActivity.class);
intent.putExtra("type", HtmlActivity.HTML_MAP);
intent.putExtra("name", "");
intent.putExtra("config", "");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
App.getContext().startActivity(intent);
}
/***
* 写入本地数据
* @param jsonParams
*/
@JavascriptInterface
public void setStorageData(String jsonParams) {
try {
JSONObject json = new JSONObject(jsonParams);
JSONObject msgObj = json.optJSONObject("msg");
String key = msgObj.optString("key");
String value = msgObj.optString("value");
VenvyPreferenceHelper.putString(mContext, TextUtils.isEmpty(mDeveloperUserId) ? "" : mDeveloperUserId, key, value);
} catch (JSONException e) {
}
}
@JavascriptInterface
public boolean upLoad(String uploadData) {
UpLoadDataBean bean = JSON.parseObject(uploadData, UpLoadDataBean.class);
bean.username = Config.username;
bean.uid = Integer.valueOf(Config.userId);
bean.path = getConfig(bean.config);
new Thread(() -> {
Requests requests = new Requests.Builder()
.url("http://cloud.protector.moe/config/paths/")
.json(JSON.toJSONString(bean))
.build()
.execute();
Log.i(TAG, "上传文件" + requests.status);
Looper.prepare();
if (requests.status == 201) {
new SweetAlertDialog(this.activity, SweetAlertDialog.SUCCESS_TYPE)
.setTitleText("在线配置")
.setContentText("上传成功")
.setConfirmText("确定")
.setConfirmClickListener(SweetAlertDialog::cancel)
.show();
} else {
new SweetAlertDialog(this.activity, SweetAlertDialog.ERROR_TYPE)
.setTitleText("在线配置")
.setContentText("上传失败")
.setCancelText("确定")
.setCancelClickListener(SweetAlertDialog::cancel)
.show();
}
Looper.loop();
}).start();
return true;
}
@JavascriptInterface
public void onFinish(String obj) {
Log.i(TAG, "[任务] 用户请求添加任务" + obj);
TaskManager manager = TaskManager.getInstance();
manager.addTask(obj);
callBack.onFinish(null);
}
@JavascriptInterface
public void download(String data) {
DownloadPathBean pathBean = JSON.parseObject(data, DownloadPathBean.class);
List<MapConfigBean> list = LitePal
.where("name=?", pathBean.title)
.find(MapConfigBean.class);
for (MapConfigBean l : list) {
l.delete();
}
MapConfigBean bean = new MapConfigBean();
bean.name = pathBean.title;
bean.data = pathBean.path_pe.replace("\\", "");
bean.save();
}
@android.webkit.JavascriptInterface
public void longClickImage(String img) {
ALog.d("长按图片" +img);
//显示下拉底部弹窗
new XPopup.Builder(activity)
.asCustom(new ImageManagePopupView(activity,img,null))
.show();
}
@JavascriptInterface
public void setValues(String jsonValuesFromTokenView) {
Map<String, String> updates;
try
{
updates = new Gson().fromJson(jsonValuesFromTokenView, new TypeToken<HashMap<String, String>>() {}.getType());
}
catch (Exception e)
{
updates = new HashMap<>();
}
onSetValuesListener.setValues(updates);
}
@JavascriptInterface
public void onFinish(String data) {
Log.d(TAG, "收到设置:" + data);
Setting setting = Setting.getInstance();
setting.settingBean = JSON.parseObject(data, SettingBean.class);
setting.save();
callBack.onFinish(null);
}
@JavascriptInterface
public void removeObserver(String type, String jsFunction) {
if (jsMap.containsKey(type)) {
List<String> temp = jsMap.get(type);
if (temp.contains(jsFunction)) {
temp.remove(jsFunction);
}
}
}
@JavascriptInterface
public void kcs_axios_error(String error) {
activity.runOnUiThread(() -> {
String text = String.format(Locale.US, "[Error] %s", error);
((TextView) activity.findViewById(R.id.kc_error_text)).setText(text);
});
}
@android.webkit.JavascriptInterface
public void longClickImage(String img) {
ALog.d("长按图片" +img);
//显示下拉底部弹窗
new XPopup.Builder(activity)
.asCustom(new ImageManagePopupView(activity,img,null))
.show();
}
/**
* 点击图片
*/
@JavascriptInterface
public void clickImage(String src){
LogUtil.v(TAG,"webview点击图片:"+src);
if (clickImageCallBack!=null){
clickImageCallBack.clickImage(src);
}
}
@SuppressWarnings("unused")
@JavascriptInterface
public void error() {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
destroyWebView();
out(null);
}
});
}
@JavascriptInterface
public void setConfig(String jsParams) {
try {
JSONObject json = new JSONObject(jsParams);
JSONObject payStatus = json.optJSONObject("msg");
payDisabled = payStatus.optBoolean("payDisabled");
//todo
} catch (JSONException e) {
}
}