登录
注册
用户名
Email
自动登录
找回密码
密码
登录
立即注册
只需一步,快速开始
好友
帖子
收藏
道具
勋章
任务
日志
设置
退出
首页
HOME
服务体系
SERVICE
成功案例
CASE
技术分享
SHARE
扩展中心
EXTEND
关于我们
ABOUT
免费咨询热线:
13559213891
本版
帖子
用户
Discuz下载
好集导航
技术博客
Crx349博客
Dismall优惠应用
知识打赏
无限星辰工作室-客户无限互联网动力之源
»
技术分享
›
App/小程序资源区
›
HTML5技术交流(小游戏)
›
hbuilder离线打包 websocket全局共享
hbuilder离线打包 websocket全局共享
crx349
于 2018-6-6 23:32 [HBuilder] 发表在
[复制链接]
[显示全部楼层]
[打印]
[上一主题]
[下一主题]
离线打包后手写websocket
用到的jar包 android-support-v4.jar
package com.websocket;
import java.io.IOException;
import java.util.ArrayList;
import com.koushikdutta.async.callback.CompletedCallback;
import com.koushikdutta.async.http.AsyncHttpClient;
import com.koushikdutta.async.http.WebSocket;
import android.R.plurals;
import android.content.Context;
import android.util.Log;
import android.webkit.WebView;
import com.koushikdutta.async.http.AsyncHttpClient.WebSocketConnectCallback;
import io.dcloud.WebAppActivity;
import io.dcloud.common.DHInterface.IApp;
import io.dcloud.common.DHInterface.IWebview;
import io.dcloud.common.DHInterface.StandardFeature;
import io.dcloud.common.util.JSUtil;
import io.dcloud.feature.internal.sdk.SDK;
public class HWebSocket extends StandardFeature{
private static int tryTime = 1;
private static WebSocket webSocket = null;
public static void webConnect(final String url) {
if (webSocket == null) {
try {
AsyncHttpClient.getDefaultInstance().websocket(url, null, new WebSocketConnectCallback() {
@Override
public void onCompleted(Exception ex, WebSocket _webSocket) {
if(ex!=null) {
//获取webview
ArrayList<IWebview> ss = SDK.obtainAllIWebview();
for (IWebview iWebview : ss) {
iWebview.evalJS("onClosed('0')");
}
ex.printStackTrace();
}
webSocket = _webSocket;
webSocket.setStringCallback(new WebSocket.StringCallback() {
@Override
public void onStringAvailable(String s) {
Log.d("websocket",s);
//获取webview
ArrayList<IWebview> ss = SDK.obtainAllIWebview();
for (IWebview iWebview : ss) {
// if (iWebview.getOriginalUrl().equals("messageList.html")) {
// if((s.indexOf("Question")!=-1 || s.indexOf("GroupQuestion")!=-1 || s.indexOf("SingleQuestion")!=-1 || s.indexOf("DrawingBoardQuestion")!=-1) && (iWebview.getOriginalUrl()=="ClassroomInteraction/st_answer.html" || iWebview.getOriginalUrl()=="learnTast/drawingBoard.html")){
// continue;
// }
WebView vs = iWebview.obtainWebview();
String url = iWebview.getOriginalUrl();
iWebview.evalJS("wsRecive('" + s + "')");
// break;
// }
}
}
});
webSocket.setClosedCallback(new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
try {
if (ex != null)
Log.e("WebSocket", "Error");
} finally {
ArrayList<IWebview> ss = SDK.obtainAllIWebview();
for (IWebview iWebview : ss) {
// if (iWebview.getOriginalUrl().equals("messageList.html")) {
iWebview.evalJS("onClosed('0')");
// }
};
}
}
});
}
});
}catch(Exception e){
//socket关闭时候事件触发
ArrayList<IWebview> ss = SDK.obtainAllIWebview();
for (IWebview iWebview : ss) {
// if (iWebview.getOriginalUrl().equals("messageList.html")) {
iWebview.evalJS("onClosed('0')");
};
e.printStackTrace();
}
finally {
// if (tryTime <= 1) {
// tryTime += 1;
// webConnect(url);
// }
// ArrayList<IWebview> ss = SDK.obtainAllIWebview();
// for (IWebview iWebview : ss) {
//// if (iWebview.getOriginalUrl().equals("messageList.html")) {
// iWebview.evalJS("onClosed('0')");
// break;
// };
}
}
}
//发送socket
public static void sendMsg(String msg) {
// show(msg);
if (webSocket != null && webSocket.isOpen()) {
Log.d("c", msg);
webSocket.send(msg);
Log.d("s",webSocket.isOpen()+"");
}
}
//关闭socket
public static void close() {
if (webSocket != null && webSocket.isOpen()) {
webSocket.close();
webSocket = null;
}
}
//检查ip是否畅通
public static String pingIpAddress(String ipAddress) {
String falg = "false";
Process process = null;
try {
process = Runtime.getRuntime().exec("ping -c 1 -i 0.5 -W 1 " + ipAddress);
int status = process.waitFor();
if (status == 0) {
falg = "true";
} else {
falg = "false";
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return JSUtil.wrapJsVar(falg);
}
}
复制代码
js端 代码
var WsUrl = "ws://192.168.2.167:8080";
var ip = "192.168.2.167";
var port = "8080";
if(localStorage.getItem("ip") != null && localStorage.getItem("ip") != "") {
ip = localStorage.getItem("ip");
WsUrl = "ws://"+ip+":"+port;
}
//var ajaxUrl = "";
// 内网ip是否畅通 畅通则打开websocket
function pingIpAddress() {
if(localStorage.getItem("ip") != null && localStorage.getItem("ip") != "") {
ip = localStorage.getItem("ip");
WsUrl = "ws://"+ip+":"+port;
}
if(mui.os.android) {
try{
var Toolkit = plus.android.importClass("com.websocket.HWebSocket");
if(Toolkit) {
var t = eval(Toolkit.pingIpAddress(ip));
if(t == 'true') {
return true;
} else {
return false;
}
} else {
plus.nativeUI.alert("IM
服务
器连接失败");
return false;
}
}catch(e){
// plus.nativeUI.alert("IM
服务器
连接失败");
return false;
}
}
}
//初始化socket
function createWs() {
if(mui.os.ios) {
if('WebSocket' in window) {
debug("WebSocket")
wsClient = new WebSocket(WsUrl);
} else if('MozWebSocket' in window) {
debug("MozWebSocket")
wsClient = new MozWebSocket(WsUrl);
}
wsClient.onopen = function() {
onOpen()
};
wsClient.onclose = function() {
onClose()
};
wsClient.onmessage = function(evt) {
onMessage(evt)
};
wsClient.onerror = function() {
onError()
};
} else if(mui.os.android) {
var Toolkit = null;
try{
Toolkit = plus.android.importClass("com.websocket.HWebSocket");
if(Toolkit) {
//var wifiInfo = new Toolkit();
Toolkit.webConnect(WsUrl);
//如果可以连接则为网络为内网
localStorage.setItem("net_flag", "true");
} else {
plus.nativeUI.alert("IM服务器连接失败");
}
}catch(e){
localStorage.setItem("net_flag", "false");
return false;
}
}
}
//发送socket
function sendMsg(msg) {
if(mui.os.ios) {
//缓存本地
if(wsClient.readyState == WebSocket.OPEN) {
wsClient.send(JSON.stringify(msg));
_msg = null;
} else {
_msg = msg;
createWs();
}
} else if(mui.os.android) {
var Toolkit = null;
try{
Toolkit = plus.android.importClass("com.websocket.HWebSocket");
if(Toolkit) {
Toolkit.sendMsg(msg);
} else {
plus.nativeUI.alert("IM服务器连接失败");
}
}catch(e){
return false;
}
}
}
//socket 返回值
function wsRecive(e) {
}
// 0 错误断开 1 自然断开
function onClosed(e) {
if(e == '0') {
var ws = plus.webview.currentWebview();
if(ws.id=='entrance'){
return;
}
var ars = plus.webview.getDisplayWebview();
if(ars[ars.length-1].id==ws.id){
mui.alert("连接已断开,请重启程序");
}
}
}
//关闭socket方法
var close = function() {
var Toolkit = null;
try{
Toolkit = plus.android.importClass("com.websocket.HWebSocket");
if(Toolkit) {
Toolkit.close();
} else {
plus.nativeUI.alert("IM服务器连接失败");
}
}catch(e){
return false;
}
}
复制代码
配置hbuilder 类引用
/assets/data/dcloud_properties.xml
<feature name="HWebSocket" value="com.websocket.HWebSocket"></feature>
本教程由
无限星辰工作室
CRX349独家整理和提供,转载请注明地址,谢谢。本文地址:
https://www.xmspace.net/thread-616-1-1.html
无限星辰工作室
好集导航
Discuz全集下载
星辰站长网
集热爱361
一品文学
手机小游戏合集
海外空间网
星辰api
星辰支付二维码管理平台
阿里云服务器
腾讯云服务器
服务Discuz!建站|DiscuzQ配置|二开|小程序|APP|搬家|挂马清理|防护|Win/Linux环境搭建|优化|运维|
服务理念:专业 诚信 友好QQ842062626
服务项目
Q群315524225
发表于 2018-6-6 23:32:46
|
显示全部楼层
|
阅读模式
回复
|
使用道具
举报
该帖共收到
0
条回复!
B
Color
Image
Link
Quote
Code
Smilies
高级模式
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
回复
点评
评分
分享
推荐板块
站务公告
客户问答区
VIP客户专区
Discuz!技术分享
Discuz!教程
Discuz!模板
Discuz!插件
Discuz!漏洞补丁
Discuz!版本下载
站长资讯
查看全部板块>>
美图秀
fastadmin 后台界面使用字段数组类型
Discuz!x3.5 修改标题高亮颜色
Discuz!x3.5 应用中心 下载应用一直下载中
帖子定时显示
论坛辅助审核
热门活动
fastadmin 后台界面使用字段数组类型
立即参加
Discuz!x3.5 修改标题高亮颜色
立即参加
Discuz!x3.5 应用中心 下载应用一直下载中
立即参加
帖子定时显示
立即参加
论坛辅助审核
立即参加
热门推荐
►
Discuz!x3.5 导航浮动修改方法
►
Discuz!x3.5 上传附件后缀自动改名attach
►
帝国cms nginx 目录安全配置
►
Phpcms 挂马解决案例
►
Discuz! X 开发过程中常用函数或变量说明
►
wordpress 挂马清理案例
►
帝国cms 挂马处理案例之一
►
Thinkphp5 事务和foreach连用注意事项
►
2024春节放假通知
►
Docker部署宝塔
►
fastadmin 后台界面使用字段数组类型
►
thinkphp5超全局变量、魔术方法和魔术变量
►
Discuz!x3.5 修改标题高亮颜色
►
Discuz!x3.5 应用中心 下载应用一直下载中
►
Fastadmin 修改js 立即生效解决方案
►
宝塔申请ssl证书错误 Invalid version. The
►
帖子定时显示
►
论坛辅助审核
►
打赏赞助网站
►
thinphp6 composer 自动加载错误解决方案
Online Service
快速回复
返回顶部
返回列表