h5调用java方法,并向java传参。
- 目前发现是传递不了对象的,如果需要传递对象,要转成json传递
- 最好传递的参数全是string类型,布尔值用0,1 代替
发现h5无法触发java方法的自查
- 看有没有加入注解 @JavascriptInterface
- 遇到一种情况,就是在h5调用java方法里,做了逻辑处理,并调用h5的方法。这时候无法触发。用rxjava切换主线程
@JavascriptInterface
fun goToMyTsDevice() {
Flowable.just("").observeOn(AndroidSchedulers.mainThread()).subscribe {
if (bleService.isTsHasConnected()) {
bleService.writeData(TsBleUtils.writeTsInfo())
} else {
val bean = TsDeviceH5Bean("--", "--", "--")
mWebView.takeH5FuncWithObj(TsConstans.H5_TS_INFO, bean)
}
}
}
h5调用java方法时,java方法是不能有返回值的。好像是个异步的过程,h5根本收不到return的值。只能调用h5方法传值。最好也有包裹一层线程的切换
java调用h5如果需要传递多个参数,最好的办法是传递一个json,不然的话,调用 val h5Fuc = “javascript:{funcName(’{param}’)” ,引号的问题会让人头大
下面发几个扩展方法
fun X5WebView.takeH5Func(funcName: String) {
if (funcName.isNullOrEmpty()) {
BuglyLog.e("X5WebView", "takeH5Func==funcName为空")
} else {
val h5Fuc = "javascript:${funcName}()"
LogUtil.d("java调用h5的方法>>>${h5Fuc}")
this.loadUrl(h5Fuc)
}
}
fun X5WebView.takeH5FuncWithParam(funcName: String, param: String) {
if (funcName.isNullOrEmpty()) {
BuglyLog.e("X5WebView", "takeH5Func==funcName为空")
} else {
val h5Fuc = "javascript:${funcName}(\'${param}\')"
LogUtil.d("java调用h5的方法>>>${h5Fuc}")
(this as WebView).loadUrl(h5Fuc)
}
}
fun X5WebView.takeH5FuncWithObj(funcName: String, param: Any) {
if (funcName.isNullOrEmpty()) {
BuglyLog.e("X5WebView", "takeH5Func==funcName为空")
} else {
val h5Fuc = "javascript:${funcName}(${Gson().toJson(param)})"
LogUtil.d("java调用h5的方法>>>${h5Fuc}")
(this as WebView).loadUrl(h5Fuc)
}
}
记录下mob shareSdk 微信分享小程序的问题,出现不支持的分享类型的排查
- 看一下小程序id 一般以gh_开头
- 查看下有没有设置图片url,一定是网络图片,要不就传null,我看ios就可以,我没试过
- 一定要用的方法 setWxUserName,setWxPath,setTitle,setText,setImageUrl,setUrl
- 参考的官方链接1
- 参考的官方链接2
public static void weChatToOpenApplets(Context context, String title, String text, int logoId, String appletsID, String appletsPath, String picPathurl) {
MobSDK.init(context);
MobSDK.submitPolicyGrantResult(true, null);
Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
Wechat.ShareParams SP2 = new Wechat.ShareParams();
SP2.setWxUserName(appletsID);
SP2.setWxPath(appletsPath);
SP2.setTitle(title);
SP2.setText(text);
SP2.setImageUrl(picPathurl);
SP2.setUrl("https://www.baokaodaxue.com/bkdxapp/");
SP2.setShareType(Platform.SHARE_WXMINIPROGRAM);
wechat.share(SP2);
wechat.setPlatformActionListener(new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
DialogUtils.showLog(TAG, "onComplete platform:" + platform.getName());
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
DialogUtils.showShortToast(context, R.string.ssdk_oks_share_failed);
DialogUtils.showLog(TAG, "onError platform:" + platform.getName());
LogUtils.d("分享失败>>" + throwable.getLocalizedMessage());
}
@Override
public void onCancel(Platform platform, int i) {
DialogUtils.showShortToast(context, R.string.ssdk_oks_share_canceled);
}
});
}
``