
独家系统全套mui,h5+教程,500节课程,文档,资料,20套app源码等
HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程
HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程
收起阅读 »
android非阻塞socket
function testSocket() {
switch(plus.os.name) {
case "Android":
// Android平台: plus.android.*
SocketChannel = plus.android.importClass("java.nio.channels.SocketChannel");
Selector = plus.android.importClass("java.nio.channels.Selector");
SelectionKey = plus.android.importClass("java.nio.channels.SelectionKey");
InetSocketAddress = plus.android.importClass("java.net.InetSocketAddress");
SocketAddress = plus.android.importClass("java.net.SocketAddress");
ByteBuffer = plus.android.importClass("java.nio.ByteBuffer");
Iterator = plus.android.importClass("java.util.Iterator");
// var iOException = plus.android.importClass("java.io.IOException");
var method = plus.android.importClass("java.lang.reflect.Method");
var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");
//BufferedReader = plus.android.importClass("java.io.BufferedReader");
//var charset = plus.android.importClass("java.nio.charset");
//测试改良
var StrictMode = plus.android.importClass("android.os.StrictMode");
var Build = plus.android.importClass("android.os.Build");
if(Build.VERSION.SDK_INT > 9) {
var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
sendbuffer = ByteBuffer.allocate(100);
receivebuffer = ByteBuffer.allocate(100);
//v selectionKeys;
//iterator=new Iterator();
selectionKey = new SelectionKey();
client = new SocketChannel();
btyeSend = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6];
count1 = 0;
testThread();
break;
case "iOS":
// iOS平台: plus.ios.*
break;
default:
// 其它平台
break;
}
}
function testThread() {
var App = plus.android.runtimeMainActivity();
var Thread = plus.ios.importClass("java.lang.Thread");
socketChannel = SocketChannel.open();
//ByteBuffer dst;
socketChannel.configureBlocking(false);
selector = Selector.open();
socketChannel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_CONNECT | SelectionKey.OP_WRITE);
//socketAddress = new SocketAddress();
socketAddress = new InetSocketAddress("10.131.164.32", 1991);
socketChannel.connect(socketAddress);
var llflag = 0;
var Runnable = plus.android.implements("java.lang.Runnable", {
"run": function() {
//选择一组键,其相应的通道已为 I/O 操作准备就绪。
//此方法执行处于阻塞模式的选择操作。
//返回此选择器的已选择键集。
while(true) {
selector.select();
//System.out.println(selectionKeys.size());
selectionKeys = selector.selectedKeys();
plus.android.importClass(selectionKeys);
//selectionKeys.clear();
iterator = selectionKeys.iterator();
plus.android.importClass(iterator);
while(iterator.hasNext()) {
selectionKey = iterator.next();
if(selectionKey.isConnectable() && (llflag == 0)) {
console.log("client connect");
llflag = 1;
client = selectionKey.channel();
// 判断此通道上是否正在进行连接操作。
// 完成套接字通道的连接过程。
if(client.isConnectionPending()) {
client.finishConnect();
console.log("完成连接!");
sendbuffer.clear();
// BufferedInputStream br = new BufferedInputStream(new FileInputStream(new File("D:\\BigData.zip")));
// byte[] b = new byte[2];
// br.read(b);
//b[0] = 53;
//b[1] = 54;
// b =[1,2,3];
sendbuffer.put(btyeSend);
sendbuffer.flip();
// System.out.println(System.currentTimeMillis());
client.write(sendbuffer);
//ystem.out.println(System.currentTimeMillis());
}
// client.register(selector, SelectionKey.OP_READ);
} else if(selectionKey.isReadable()) {
client = selectionKey.channel();
//将缓冲区清空以备下次读取
receivebuffer.clear();
//读取服务器发送来的数据到缓冲区中
count = client.read(receivebuffer);
if(count > 0) {
receiveText = new String(receivebuffer.array(), 0, count);
console.log("客户端接受服务器端数据--:" + receiveText);
// if (client.isConnectionPending()) {
client.finishConnect();
console.log("完成连接!");
sendbuffer.clear();
// BufferedInputStream br = new BufferedInputStream(new FileInputStream(new File("D:\\BigData.zip")));
var b;
b = receivebuffer.array();
var a = []
for(var i = 0; i < count; i++)
a[i] = b[i];
sendbuffer.put(a);
sendbuffer.flip();
// System.out.println(System.currentTimeMillis());
client.write(sendbuffer);
//ystem.out.println(System.currentTimeMillis());
// }
}
}
if(sendFlag == 1) {
client.finishConnect();
sendbuffer.clear();
//byte[] b = new byte[5];
// br.read(b);
var b_buff = [];
for(var i = 0; i < count1; i++) {
b_buff[i] = btyeSend[i];
}
sendbuffer.put(b_buff);
sendbuffer.flip();
client.write(sendbuffer);
sendFlag = 0;
}
}
//selectionKeys.clear();
}
}
});
//方式1启动线程
App.runOnUiThread(Runnable);
}
function outValue() {
for(var i = 0; i < 16; i++)
btyeSend[i] = 0;
btyeSend[0] = 65;
btyeSend[1] = 66;
count1 = 2;
sendFlag = 1;
}
function testSocket() {
switch(plus.os.name) {
case "Android":
// Android平台: plus.android.*
SocketChannel = plus.android.importClass("java.nio.channels.SocketChannel");
Selector = plus.android.importClass("java.nio.channels.Selector");
SelectionKey = plus.android.importClass("java.nio.channels.SelectionKey");
InetSocketAddress = plus.android.importClass("java.net.InetSocketAddress");
SocketAddress = plus.android.importClass("java.net.SocketAddress");
ByteBuffer = plus.android.importClass("java.nio.ByteBuffer");
Iterator = plus.android.importClass("java.util.Iterator");
// var iOException = plus.android.importClass("java.io.IOException");
var method = plus.android.importClass("java.lang.reflect.Method");
var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");
//BufferedReader = plus.android.importClass("java.io.BufferedReader");
//var charset = plus.android.importClass("java.nio.charset");
//测试改良
var StrictMode = plus.android.importClass("android.os.StrictMode");
var Build = plus.android.importClass("android.os.Build");
if(Build.VERSION.SDK_INT > 9) {
var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
sendbuffer = ByteBuffer.allocate(100);
receivebuffer = ByteBuffer.allocate(100);
//v selectionKeys;
//iterator=new Iterator();
selectionKey = new SelectionKey();
client = new SocketChannel();
btyeSend = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6];
count1 = 0;
testThread();
break;
case "iOS":
// iOS平台: plus.ios.*
break;
default:
// 其它平台
break;
}
}
function testThread() {
var App = plus.android.runtimeMainActivity();
var Thread = plus.ios.importClass("java.lang.Thread");
socketChannel = SocketChannel.open();
//ByteBuffer dst;
socketChannel.configureBlocking(false);
selector = Selector.open();
socketChannel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_CONNECT | SelectionKey.OP_WRITE);
//socketAddress = new SocketAddress();
socketAddress = new InetSocketAddress("10.131.164.32", 1991);
socketChannel.connect(socketAddress);
var llflag = 0;
var Runnable = plus.android.implements("java.lang.Runnable", {
"run": function() {
//选择一组键,其相应的通道已为 I/O 操作准备就绪。
//此方法执行处于阻塞模式的选择操作。
//返回此选择器的已选择键集。
while(true) {
selector.select();
//System.out.println(selectionKeys.size());
selectionKeys = selector.selectedKeys();
plus.android.importClass(selectionKeys);
//selectionKeys.clear();
iterator = selectionKeys.iterator();
plus.android.importClass(iterator);
while(iterator.hasNext()) {
selectionKey = iterator.next();
if(selectionKey.isConnectable() && (llflag == 0)) {
console.log("client connect");
llflag = 1;
client = selectionKey.channel();
// 判断此通道上是否正在进行连接操作。
// 完成套接字通道的连接过程。
if(client.isConnectionPending()) {
client.finishConnect();
console.log("完成连接!");
sendbuffer.clear();
// BufferedInputStream br = new BufferedInputStream(new FileInputStream(new File("D:\\BigData.zip")));
// byte[] b = new byte[2];
// br.read(b);
//b[0] = 53;
//b[1] = 54;
// b =[1,2,3];
sendbuffer.put(btyeSend);
sendbuffer.flip();
// System.out.println(System.currentTimeMillis());
client.write(sendbuffer);
//ystem.out.println(System.currentTimeMillis());
}
// client.register(selector, SelectionKey.OP_READ);
} else if(selectionKey.isReadable()) {
client = selectionKey.channel();
//将缓冲区清空以备下次读取
receivebuffer.clear();
//读取服务器发送来的数据到缓冲区中
count = client.read(receivebuffer);
if(count > 0) {
receiveText = new String(receivebuffer.array(), 0, count);
console.log("客户端接受服务器端数据--:" + receiveText);
// if (client.isConnectionPending()) {
client.finishConnect();
console.log("完成连接!");
sendbuffer.clear();
// BufferedInputStream br = new BufferedInputStream(new FileInputStream(new File("D:\\BigData.zip")));
var b;
b = receivebuffer.array();
var a = []
for(var i = 0; i < count; i++)
a[i] = b[i];
sendbuffer.put(a);
sendbuffer.flip();
// System.out.println(System.currentTimeMillis());
client.write(sendbuffer);
//ystem.out.println(System.currentTimeMillis());
// }
}
}
if(sendFlag == 1) {
client.finishConnect();
sendbuffer.clear();
//byte[] b = new byte[5];
// br.read(b);
var b_buff = [];
for(var i = 0; i < count1; i++) {
b_buff[i] = btyeSend[i];
}
sendbuffer.put(b_buff);
sendbuffer.flip();
client.write(sendbuffer);
sendFlag = 0;
}
}
//selectionKeys.clear();
}
}
});
//方式1启动线程
App.runOnUiThread(Runnable);
}
function outValue() {
for(var i = 0; i < 16; i++)
btyeSend[i] = 0;
btyeSend[0] = 65;
btyeSend[1] = 66;
count1 = 2;
sendFlag = 1;
}
收起阅读 »

【讲座】html5+ App开发工程化实践之路
大家好,我是小青年。我在segmentfault上开了个5+ App开发的讲座,欢迎大家前去捧场。本次讲座首先会讲解一下 5+ App 开发核心概念,以及谈一谈在 5+app 开发中的工程化探索方案,并且会在这次讲座发布一个 5+ App 开发的脚手架工具 plus-cli,主要是弥补 5+ App 开发中工程化这块的缺失,以及探讨一下 5+ App 开发如何和 Vue.js 框架如何结合的问题。
本次讲座的主要内容分为以下几个部分:
- html5+ App 开发的优势及基本概念
- MUI 框架学习指南
- html5+ 规范核心 API 详细讲解
- html5+ 脚手架 plus-cli 发布
- html5+ App 优化方案
- 基于 html5+ 标准的流应用开发
面向人群:
- 想快速了解 5+ App 开发的新手朋友
- 想使用新特性将自己的 App 进行调优的朋友
- 想在 5+ App 中使用 Vue.js 等框架进行模块化开发的朋友
如果大家对5+ App开发有任何疑问,可以提前通过邮件:zhaomenghuan@foxmail.com 或者在讲座下方评论反馈给我。
讲座报名地址:https://segmentfault.com/l/1500000009542402?r=bPqXdU

大家好,我是小青年。我在segmentfault上开了个5+ App开发的讲座,欢迎大家前去捧场。本次讲座首先会讲解一下 5+ App 开发核心概念,以及谈一谈在 5+app 开发中的工程化探索方案,并且会在这次讲座发布一个 5+ App 开发的脚手架工具 plus-cli,主要是弥补 5+ App 开发中工程化这块的缺失,以及探讨一下 5+ App 开发如何和 Vue.js 框架如何结合的问题。
本次讲座的主要内容分为以下几个部分:
- html5+ App 开发的优势及基本概念
- MUI 框架学习指南
- html5+ 规范核心 API 详细讲解
- html5+ 脚手架 plus-cli 发布
- html5+ App 优化方案
- 基于 html5+ 标准的流应用开发
面向人群:
- 想快速了解 5+ App 开发的新手朋友
- 想使用新特性将自己的 App 进行调优的朋友
- 想在 5+ App 中使用 Vue.js 等框架进行模块化开发的朋友
如果大家对5+ App开发有任何疑问,可以提前通过邮件:zhaomenghuan@foxmail.com 或者在讲座下方评论反馈给我。
讲座报名地址:https://segmentfault.com/l/1500000009542402?r=bPqXdU
收起阅读 »
独家系统全套mui,h5+教程,500节课程,文档,资料,20套app源码等
HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程
HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程
收起阅读 »
大家格式化html代码的时候卡吗
编辑html页面的时候
ctrl+shift+f 格式化代码的时候,总要卡半天.
希望能跟Webstrom一样流畅
编辑html页面的时候
ctrl+shift+f 格式化代码的时候,总要卡半天.
希望能跟Webstrom一样流畅

android6.0以上的android webview支持js es6
HBulider支持es6,只需在项目目录上点右键,选择引入语法框架,选择es6。
自带的浏览器不支持es6。
在手机上运行,需要安卓版本6.0以上才支持es6。
HBulider支持es6,只需在项目目录上点右键,选择引入语法框架,选择es6。
自带的浏览器不支持es6。
在手机上运行,需要安卓版本6.0以上才支持es6。

事件处理的on完全可以替代addEventListenner
1、移除addEventListenner,名字太长,主要是没用,完全可以用on替代。
2、on(event,selector,handler)为批量选择元素,而on(event,handler)则为addEventListenner的替代方法,内部只需稍微做下判断第二个参数是否为一个函数做处理即可,既简单又不冗余。
1、移除addEventListenner,名字太长,主要是没用,完全可以用on替代。
2、on(event,selector,handler)为批量选择元素,而on(event,handler)则为addEventListenner的替代方法,内部只需稍微做下判断第二个参数是否为一个函数做处理即可,既简单又不冗余。

透传消息分享(安卓和IOS)
IOS是6,安卓是华为。安卓手机在线和后台能接受到推送信息,退出的话接受不到,苹果手机的APP在不在线都可以接受到推送。
后台代码没有弄,是通过个推上的透传消息进行的推送。客户端代码如下:
//消息推送
mui.plusReady(function() {
// 监听点击消息事件
plus.push.addEventListener( "click", function( msg ) {
var payload=(plus.os.name=='iOS')?msg.payload:JSON.parse(msg.payload);
}, false );
// 监听在线消息事件
plus.push.addEventListener( "receive", function( msg ) {
logoutPushMsg( msg );
}, false );
});
//获取穿透参数
function logoutPushMsg( msg ) {
if ( msg.payload ) {
if ( typeof(msg.payload)=="string" ) {
createLocalPushMsg(msg.content);
} else {
var data = JSON.parse(msg.payload);
createLocalPushMsg(data.content);
}
} else {
console.log( "payload: undefined" );
}
}
//创建本地推送
function createLocalPushMsg(content){
var options = {cover:false,};
plus.push.createMessage(content, "LocalMSG", options );
if(plus.os.name=="iOS"){
alert('*如果无法创建消息,请到"设置"->"通知"中配置应用在通知中心显示!');
}
}
PS:IOS的话证书有两份,一份是上传到个推的,一份是打包用的。可以参考网站:http://docs.getui.com/mobile/ios/apns/
IOS是6,安卓是华为。安卓手机在线和后台能接受到推送信息,退出的话接受不到,苹果手机的APP在不在线都可以接受到推送。
后台代码没有弄,是通过个推上的透传消息进行的推送。客户端代码如下:
//消息推送
mui.plusReady(function() {
// 监听点击消息事件
plus.push.addEventListener( "click", function( msg ) {
var payload=(plus.os.name=='iOS')?msg.payload:JSON.parse(msg.payload);
}, false );
// 监听在线消息事件
plus.push.addEventListener( "receive", function( msg ) {
logoutPushMsg( msg );
}, false );
});
//获取穿透参数
function logoutPushMsg( msg ) {
if ( msg.payload ) {
if ( typeof(msg.payload)=="string" ) {
createLocalPushMsg(msg.content);
} else {
var data = JSON.parse(msg.payload);
createLocalPushMsg(data.content);
}
} else {
console.log( "payload: undefined" );
}
}
//创建本地推送
function createLocalPushMsg(content){
var options = {cover:false,};
plus.push.createMessage(content, "LocalMSG", options );
if(plus.os.name=="iOS"){
alert('*如果无法创建消息,请到"设置"->"通知"中配置应用在通知中心显示!');
}
}
PS:IOS的话证书有两份,一份是上传到个推的,一份是打包用的。可以参考网站:http://docs.getui.com/mobile/ios/apns/

独家系统全套mui,h5+教程,500节课程,文档,资料,20套app源码等
HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程
HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程
收起阅读 »