HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

指昂平板 指纹识别接口

技术分享 5 SDK

基于厂家提供的例子 android060demo.rar

// FingerPrintFeature.java      
//依赖 demo 的 andriod060.java 和 za_finger.java;引入库 libandroid_060.so;把demo中的权限,加入项目  
//另 closeDevice方法 调用时发现有问题并没有调用,只open然后读取指纹发现没有问题  

package com.renhe.za.fingerPrintApi;  
import io.dcloud.DHInterface.IWebview;  
import io.dcloud.DHInterface.StandardFeature;  
import io.dcloud.util.JSUtil;  
import org.json.JSONArray;  
import org.json.JSONException;  
import org.json.JSONObject;  
import com.za.android060;  
import com.zafinger.ZA_finger;  
public class FingerPrintFeature extends StandardFeature{  

    public void openDevice(IWebview pWebview, JSONArray array){       
        int DEV_ADDR = 0xffffffff;  
        android060 a6= new android060();  
        try{  
            //a6.card_power_off(60, 3);  
            ZA_finger.fppower(1);  
            //ZA_finger.cardpower(1);  
            android.os.SystemClock.sleep(1000);  
            int status = a6.ZAZOpenDeviceEx(-1,2, 3, 12, 0, 0);  
            if(status!=1){  
                JSUtil.execCallback(pWebview, array.optString(0), "打开设备失败", JSUtil.ERROR, false);  
                return;  
            }  
            JSUtil.execCallback(pWebview, array.optString(0), "打开设备成功", JSUtil.OK, false);  
        }catch(Exception ex){  
            JSUtil.execCallback(pWebview, array.optString(0), "打开设备异常", JSUtil.ERROR, false);  
            return;  
        }  
    }  

    public void closeDevice(IWebview pWebview, JSONArray array)  
    {  
        int DEV_ADDR = 0xffffffff;  
        android060 a6= new android060();  
        try{  
            a6.ZAZCloseDeviceEx();  
            ZA_finger.fppower(0);  
            //ZA_finger.cardpower(0);  
            JSUtil.execCallback(pWebview, array.optString(0), "关闭设备成功", JSUtil.OK, false);  
        }catch(Exception ex){  
            JSUtil.execCallback(pWebview, array.optString(0), "关闭设备失败", JSUtil.ERROR, false);  
        }  
    }  

    public void doFingerPrint(IWebview pWebview, JSONArray array){  

        int DEV_ADDR = 0xffffffff;  
        android060 a6= new android060();  
        try{  
            int nRet = 0;  
            nRet = a6.ZAZGetImage(DEV_ADDR);  
            if(nRet == 0){  
                int[] len = { 0, 0 };  
                char[] Image = new char[256 * 288];  
                a6.ZAZUpImage(DEV_ADDR, Image, len);   
                String fingerPrintPath = android.os.Environment.getExternalStorageDirectory().getPath()+"/fingerPrint.bmp";  
                a6.ZAZImgData2BMP(Image, fingerPrintPath);  

                nRet= a6.ZAZGenChar(DEV_ADDR, a6.CHAR_BUFFER_A);  
                if(nRet ==a6.PS_OK){  
                    int[] iTempletLength = { 0, 0 };  
                    byte[] pTemplet = new byte[512];  
                    nRet=a6.ZAZUpChar(DEV_ADDR,a6.CHAR_BUFFER_A, pTemplet, iTempletLength);  
                    if(nRet ==a6.PS_OK){  
                        JSONObject obj = new JSONObject();  
                        obj.put("fingerPrintCode", charToHexString(pTemplet));  
                        obj.put("fingerPrintPath", fingerPrintPath);  
                        JSUtil.execCallback(pWebview, array.optString(0), obj, JSUtil.OK, false);  
                    }else{  
                        JSUtil.execCallback(pWebview, array.optString(0), "生成指纹特征码失败", JSUtil.ERROR, false);  
                    }  
                }else{  
                    JSUtil.execCallback(pWebview, array.optString(0), "指纹特征太差,重新录入", JSUtil.ERROR, false);  
                }     
            }else if(nRet==a6.PS_NO_FINGER){  
                JSUtil.execCallback(pWebview, array.optString(0), "未按手指", JSUtil.ERROR, false);  
            }else {  
                JSUtil.execCallback(pWebview, array.optString(0), "读取指纹失败", JSUtil.ERROR, false);  
            }  

        }catch(Exception ex){  
            JSUtil.execCallback(pWebview, array.optString(0), "读取指纹异常", JSUtil.ERROR, false);  
        }     
    }  

    private String charToHexString(byte[] val) {  
        String temp="";  
        for(int i=0;i<val.length;i++)  
        {   
            String hex = Integer.toHexString(0xff & val[i]);  
            if (hex.length() == 1) {   
                hex = '0' + hex;   
            }   
            temp += hex.toUpperCase();     
        }  
        return temp;  
    }  
}
继续阅读 »

基于厂家提供的例子 android060demo.rar

// FingerPrintFeature.java      
//依赖 demo 的 andriod060.java 和 za_finger.java;引入库 libandroid_060.so;把demo中的权限,加入项目  
//另 closeDevice方法 调用时发现有问题并没有调用,只open然后读取指纹发现没有问题  

package com.renhe.za.fingerPrintApi;  
import io.dcloud.DHInterface.IWebview;  
import io.dcloud.DHInterface.StandardFeature;  
import io.dcloud.util.JSUtil;  
import org.json.JSONArray;  
import org.json.JSONException;  
import org.json.JSONObject;  
import com.za.android060;  
import com.zafinger.ZA_finger;  
public class FingerPrintFeature extends StandardFeature{  

    public void openDevice(IWebview pWebview, JSONArray array){       
        int DEV_ADDR = 0xffffffff;  
        android060 a6= new android060();  
        try{  
            //a6.card_power_off(60, 3);  
            ZA_finger.fppower(1);  
            //ZA_finger.cardpower(1);  
            android.os.SystemClock.sleep(1000);  
            int status = a6.ZAZOpenDeviceEx(-1,2, 3, 12, 0, 0);  
            if(status!=1){  
                JSUtil.execCallback(pWebview, array.optString(0), "打开设备失败", JSUtil.ERROR, false);  
                return;  
            }  
            JSUtil.execCallback(pWebview, array.optString(0), "打开设备成功", JSUtil.OK, false);  
        }catch(Exception ex){  
            JSUtil.execCallback(pWebview, array.optString(0), "打开设备异常", JSUtil.ERROR, false);  
            return;  
        }  
    }  

    public void closeDevice(IWebview pWebview, JSONArray array)  
    {  
        int DEV_ADDR = 0xffffffff;  
        android060 a6= new android060();  
        try{  
            a6.ZAZCloseDeviceEx();  
            ZA_finger.fppower(0);  
            //ZA_finger.cardpower(0);  
            JSUtil.execCallback(pWebview, array.optString(0), "关闭设备成功", JSUtil.OK, false);  
        }catch(Exception ex){  
            JSUtil.execCallback(pWebview, array.optString(0), "关闭设备失败", JSUtil.ERROR, false);  
        }  
    }  

    public void doFingerPrint(IWebview pWebview, JSONArray array){  

        int DEV_ADDR = 0xffffffff;  
        android060 a6= new android060();  
        try{  
            int nRet = 0;  
            nRet = a6.ZAZGetImage(DEV_ADDR);  
            if(nRet == 0){  
                int[] len = { 0, 0 };  
                char[] Image = new char[256 * 288];  
                a6.ZAZUpImage(DEV_ADDR, Image, len);   
                String fingerPrintPath = android.os.Environment.getExternalStorageDirectory().getPath()+"/fingerPrint.bmp";  
                a6.ZAZImgData2BMP(Image, fingerPrintPath);  

                nRet= a6.ZAZGenChar(DEV_ADDR, a6.CHAR_BUFFER_A);  
                if(nRet ==a6.PS_OK){  
                    int[] iTempletLength = { 0, 0 };  
                    byte[] pTemplet = new byte[512];  
                    nRet=a6.ZAZUpChar(DEV_ADDR,a6.CHAR_BUFFER_A, pTemplet, iTempletLength);  
                    if(nRet ==a6.PS_OK){  
                        JSONObject obj = new JSONObject();  
                        obj.put("fingerPrintCode", charToHexString(pTemplet));  
                        obj.put("fingerPrintPath", fingerPrintPath);  
                        JSUtil.execCallback(pWebview, array.optString(0), obj, JSUtil.OK, false);  
                    }else{  
                        JSUtil.execCallback(pWebview, array.optString(0), "生成指纹特征码失败", JSUtil.ERROR, false);  
                    }  
                }else{  
                    JSUtil.execCallback(pWebview, array.optString(0), "指纹特征太差,重新录入", JSUtil.ERROR, false);  
                }     
            }else if(nRet==a6.PS_NO_FINGER){  
                JSUtil.execCallback(pWebview, array.optString(0), "未按手指", JSUtil.ERROR, false);  
            }else {  
                JSUtil.execCallback(pWebview, array.optString(0), "读取指纹失败", JSUtil.ERROR, false);  
            }  

        }catch(Exception ex){  
            JSUtil.execCallback(pWebview, array.optString(0), "读取指纹异常", JSUtil.ERROR, false);  
        }     
    }  

    private String charToHexString(byte[] val) {  
        String temp="";  
        for(int i=0;i<val.length;i++)  
        {   
            String hex = Integer.toHexString(0xff & val[i]);  
            if (hex.length() == 1) {   
                hex = '0' + hex;   
            }   
            temp += hex.toUpperCase();     
        }  
        return temp;  
    }  
}
收起阅读 »

JFinal社区客户端源码分享

案例 App 分享 源码

使用JFinal社区公开的接口和mui开发的社区客户端,开源给大家分享下,顺便来赚点积分
源码托管:http://git.oschina.net/20110516/jfbbs_mui
项目很简单,求喷轻点








继续阅读 »

使用JFinal社区公开的接口和mui开发的社区客户端,开源给大家分享下,顺便来赚点积分
源码托管:http://git.oschina.net/20110516/jfbbs_mui
项目很简单,求喷轻点








收起阅读 »

popover弹窗在有滚动条的情况下显示位置小问题

mui popover

popover的位置在有滚动条拖动后的情况下会弹出在可视窗口以下
可以修改mui.js解决:

if ((pHeight + arrowSize) < (offset.top - window.pageYOffset-window.scrollY+30)) { //top  
    pTop = offset.top - pHeight - arrowSize-window.scrollY;  
} else if ((pHeight + arrowSize) < (wHeight - (offset.top - window.pageYOffset-window.scrollY) - aHeight)) { //bottom  
    position = 'bottom';  
    pTop = offset.top + aHeight + arrowSize-window.scrollY+18;  
} else { //middle  
    position = 'middle';  
    pTop = Math.max((wHeight - pHeight) / 2 + window.pageYOffset-window.scrollY, 0);  
    pLeft = Math.max((wWidth - pWidth) / 2 + window.pageXOffset, 0);  
}

window.scrollY是滚动条的高度
window.scrollY+30是考虑到一般app都有header和nav,+30避免被他们挡住弹窗

继续阅读 »

popover的位置在有滚动条拖动后的情况下会弹出在可视窗口以下
可以修改mui.js解决:

if ((pHeight + arrowSize) < (offset.top - window.pageYOffset-window.scrollY+30)) { //top  
    pTop = offset.top - pHeight - arrowSize-window.scrollY;  
} else if ((pHeight + arrowSize) < (wHeight - (offset.top - window.pageYOffset-window.scrollY) - aHeight)) { //bottom  
    position = 'bottom';  
    pTop = offset.top + aHeight + arrowSize-window.scrollY+18;  
} else { //middle  
    position = 'middle';  
    pTop = Math.max((wHeight - pHeight) / 2 + window.pageYOffset-window.scrollY, 0);  
    pLeft = Math.max((wWidth - pWidth) / 2 + window.pageXOffset, 0);  
}

window.scrollY是滚动条的高度
window.scrollY+30是考虑到一般app都有header和nav,+30避免被他们挡住弹窗

收起阅读 »

西安维创科技诚聘HTML5前端开发工程师

招聘

朋友您好:非常感谢观看此简章,我介绍一下公司。

    北京万维创佳科技有限公司于2005年成立工作室并承接广大客户的网站设计与制作,经过7年的客户关系我们终于在2012年建立了公司,扩建团队,同行业中也小有名气。  
    目前,与我们合作的大客户其中有“京东商城、百度、环保产业研究院、航天二院、中航集团、装甲兵学院 、东辰能源集团等4000多家事业、企业单位提供网站建设服务!  
   企业都离不开团队其中的每一个人,所以在这里诚聘HTML5前端开发工程师2名。正在找工作的您可以给我致电18701642010,或是QQ上联系我本人。互相了解一下并安排面试时间!  

www.weichuangkeji.cn 西安公司
www.weichuangkeji.com北京公司

继续阅读 »

朋友您好:非常感谢观看此简章,我介绍一下公司。

    北京万维创佳科技有限公司于2005年成立工作室并承接广大客户的网站设计与制作,经过7年的客户关系我们终于在2012年建立了公司,扩建团队,同行业中也小有名气。  
    目前,与我们合作的大客户其中有“京东商城、百度、环保产业研究院、航天二院、中航集团、装甲兵学院 、东辰能源集团等4000多家事业、企业单位提供网站建设服务!  
   企业都离不开团队其中的每一个人,所以在这里诚聘HTML5前端开发工程师2名。正在找工作的您可以给我致电18701642010,或是QQ上联系我本人。互相了解一下并安排面试时间!  

www.weichuangkeji.cn 西安公司
www.weichuangkeji.com北京公司

收起阅读 »

iOS离线打包-高德地图配置

App离线打包

高德地图配置

Linker Flags、framework等添加方法请参考这个文档
1.添加下列Linker Flags: -llibMap、-lAMapImp

  1. 添加下列framework: MAMapKit.framework、AMapSearchKit.framework、OpenGlES.framework、CoreLocation.framework
  2. 添加下列文件: AMap.bundle
    4.申请key,如果没有key将会导致地图显示不出
    参考高德地图key申请章节
  3. 打开Info.plist文件找到amap项,如果没有按图片中的格式添加该项,在下图中的红色区域输入申请的key
    注意info.plist中Bundle identifier要和你输入的安全码一致
继续阅读 »

高德地图配置

Linker Flags、framework等添加方法请参考这个文档
1.添加下列Linker Flags: -llibMap、-lAMapImp

  1. 添加下列framework: MAMapKit.framework、AMapSearchKit.framework、OpenGlES.framework、CoreLocation.framework
  2. 添加下列文件: AMap.bundle
    4.申请key,如果没有key将会导致地图显示不出
    参考高德地图key申请章节
  3. 打开Info.plist文件找到amap项,如果没有按图片中的格式添加该项,在下图中的红色区域输入申请的key
    注意info.plist中Bundle identifier要和你输入的安全码一致
收起阅读 »

WebSocket 问题总结

WEBSOCKET

推送,IM,总要遇到WebSocket支持的问题。
IOS默认就支持了, 但是Android据说4.4 以下的WebView是不支持WebSocket的。

目前看到的可行的解决方案:

  1. 长轮询workaround: socket.io
  2. Server辅助Socket: sockjs
  3. phonegap 的WebSocket插件 websocket-android-phonegap

看起来只有3号方案靠谱, 有时间把这个移植到Dcloud平台吧。

还有没有其他好的方案? 期待官方出手解决...

继续阅读 »

推送,IM,总要遇到WebSocket支持的问题。
IOS默认就支持了, 但是Android据说4.4 以下的WebView是不支持WebSocket的。

目前看到的可行的解决方案:

  1. 长轮询workaround: socket.io
  2. Server辅助Socket: sockjs
  3. phonegap 的WebSocket插件 websocket-android-phonegap

看起来只有3号方案靠谱, 有时间把这个移植到Dcloud平台吧。

还有没有其他好的方案? 期待官方出手解决...

收起阅读 »

关于打包下载下来是以前的老包的情况

打包下载 云端打包 打包

最近有开发者反映下载下来的包是以前的老包。这个时候打开浏览器看下下载地址,如果不是build.clouddn.com,而是其它域名或者IP地址,可以肯定你们的下载请求被所在网络缓存或者被运营商劫持了。可以通过以下情况解决:
1、修改dns为一些公共dns,如百度公共dns:180.76.76.76或者阿里公共dns:223.5.5.5,然后重启电脑(chrome等浏览器有连接复用,需要重启清空),看是否能够正常下载。
2、联系负责网络的同事,看下公司是不是通过了squid等代理进行上网,上网过程是否有缓存,然后让他们修改缓存策略。
3、联系所在的网络运营商的客服,提供非正常的域名和IP地址,让他们确认是否缓存或者劫持。

以上三种方法还没解决,再联系DCloud客服。

继续阅读 »

最近有开发者反映下载下来的包是以前的老包。这个时候打开浏览器看下下载地址,如果不是build.clouddn.com,而是其它域名或者IP地址,可以肯定你们的下载请求被所在网络缓存或者被运营商劫持了。可以通过以下情况解决:
1、修改dns为一些公共dns,如百度公共dns:180.76.76.76或者阿里公共dns:223.5.5.5,然后重启电脑(chrome等浏览器有连接复用,需要重启清空),看是否能够正常下载。
2、联系负责网络的同事,看下公司是不是通过了squid等代理进行上网,上网过程是否有缓存,然后让他们修改缓存策略。
3、联系所在的网络运营商的客服,提供非正常的域名和IP地址,让他们确认是否缓存或者劫持。

以上三种方法还没解决,再联系DCloud客服。

收起阅读 »

培训资源视频教程汇总

网校 视频教程 教程 培训 入门

更新:uni-app的视频教程见这里:https://uniapp.dcloud.io/resource

=========以下为5+app的培训资源=============

DCloud对开发者的学习支持分3个层面:官方文档、三方专业培训、网友经验分享

DCloud的精力主要在做产品,配套的文档也会一直完善好。
但专业的培训还不是DCloud能做好的,在HTML5中国产业联盟(http://www.html5plus.org)里,有不少专业的培训机构。
同时网友的学习经验分享也很重要。
本文汇总这些资源,希望更多的培训机构加入进来,也希望更多网友分享自己的经验。

官方入门文档

HTML5教程

  • DCloud的文档用于掌握HTML5的开发者学习HTML5+、mui等DCloud技术,如果对基础的HTML5还不甚了解,推荐先到这里学习:w3cschool HTML5教程 http://www.w3cschool.cn/html5/
继续阅读 »

更新:uni-app的视频教程见这里:https://uniapp.dcloud.io/resource

=========以下为5+app的培训资源=============

DCloud对开发者的学习支持分3个层面:官方文档、三方专业培训、网友经验分享

DCloud的精力主要在做产品,配套的文档也会一直完善好。
但专业的培训还不是DCloud能做好的,在HTML5中国产业联盟(http://www.html5plus.org)里,有不少专业的培训机构。
同时网友的学习经验分享也很重要。
本文汇总这些资源,希望更多的培训机构加入进来,也希望更多网友分享自己的经验。

官方入门文档

HTML5教程

  • DCloud的文档用于掌握HTML5的开发者学习HTML5+、mui等DCloud技术,如果对基础的HTML5还不甚了解,推荐先到这里学习:w3cschool HTML5教程 http://www.w3cschool.cn/html5/
收起阅读 »

【svn官方地址已迁移】HB安装最新的SVN版本管理插件支持1.10.x,希望对刚入门的有点帮助

SVN Mac

【svn官方地址已迁移,详情请查看https://github.com/subclipse/subclipse/wiki】
【new】https://dl.bintray.com/subclipse/archive/release/1.12.x/
不行的小伙伴就翻墙吧。推荐一个效果不错的免费的翻墙工具。
psiphon3,下载详见文末

刚用HB不久发现自带的SVN是1.6版本是在太古老了,就老想着升级,刚好今天又空摆弄了下。
Eclipse 的Subclipse 最新版本是1.10x
官方描述为:Subclipse 1.10.x includes and requires Subversion 1.10.x client features and working copy format.

Eclipse update site URL: 【old】http://subclipse.tigris.org/update_1.10.x

下面升级步骤如下:

  1. 打开工具-》插件安装

  1. 在弹出的插件安装界面选择“手动安装Eclipse插件”

  1. 在弹出的插件下载地址中把http://subclipse.tigris.org/update_1.10.x (也可以使用我们的镜像地址http://update.dcloud.net.cn/test/plugin_for_test)填进去,点击右边的添加,把下面的两个勾上,然后一直下一步到完成

  1. 安装完成之后关掉HB,重新打开升级一下工作副本就OK

继续阅读 »

【svn官方地址已迁移,详情请查看https://github.com/subclipse/subclipse/wiki】
【new】https://dl.bintray.com/subclipse/archive/release/1.12.x/
不行的小伙伴就翻墙吧。推荐一个效果不错的免费的翻墙工具。
psiphon3,下载详见文末

刚用HB不久发现自带的SVN是1.6版本是在太古老了,就老想着升级,刚好今天又空摆弄了下。
Eclipse 的Subclipse 最新版本是1.10x
官方描述为:Subclipse 1.10.x includes and requires Subversion 1.10.x client features and working copy format.

Eclipse update site URL: 【old】http://subclipse.tigris.org/update_1.10.x

下面升级步骤如下:

  1. 打开工具-》插件安装

  1. 在弹出的插件安装界面选择“手动安装Eclipse插件”

  1. 在弹出的插件下载地址中把http://subclipse.tigris.org/update_1.10.x (也可以使用我们的镜像地址http://update.dcloud.net.cn/test/plugin_for_test)填进去,点击右边的添加,把下面的两个勾上,然后一直下一步到完成

  1. 安装完成之后关掉HB,重新打开升级一下工作副本就OK

收起阅读 »

与蓝牙打印机建立连接并打印

蓝牙

mui.plusReady(function(){     
    var main = plus.android.runtimeMainActivity();  
    var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");  
    var UUID=plus.android.importClass("java.util.UUID");  
    uuid=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");  
    var BAdapter = BluetoothAdapter.getDefaultAdapter();  
    BAdapter.cancelDiscovery();//停止扫描  
    var addres_mac = plus.storage.getItem("printer");//传入打印机mac地址  
    device=BAdapter.getRemoteDevice(addres_mac);  
    plus.android.importClass(device);  
});  

function print(){  
    bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);  
    plus.android.importClass(bluetoothSocket);   
    if(!bluetoothSocket.isConnected()){  
        bluetoothSocket.connect();  
    }  
    var outputStream=bluetoothSocket.getOutputStream();  
    plus.android.importClass(outputStream);  
    var string="你好123";  
    var bytes = plus.android.invoke(string,'getBytes','gbk');  
    //console.log(bytes+"."+bytes.length);   
    outputStream.write(bytes);  
    outputStream.flush();  
}  
继续阅读 »

mui.plusReady(function(){     
    var main = plus.android.runtimeMainActivity();  
    var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");  
    var UUID=plus.android.importClass("java.util.UUID");  
    uuid=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");  
    var BAdapter = BluetoothAdapter.getDefaultAdapter();  
    BAdapter.cancelDiscovery();//停止扫描  
    var addres_mac = plus.storage.getItem("printer");//传入打印机mac地址  
    device=BAdapter.getRemoteDevice(addres_mac);  
    plus.android.importClass(device);  
});  

function print(){  
    bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);  
    plus.android.importClass(bluetoothSocket);   
    if(!bluetoothSocket.isConnected()){  
        bluetoothSocket.connect();  
    }  
    var outputStream=bluetoothSocket.getOutputStream();  
    plus.android.importClass(outputStream);  
    var string="你好123";  
    var bytes = plus.android.invoke(string,'getBytes','gbk');  
    //console.log(bytes+"."+bytes.length);   
    outputStream.write(bytes);  
    outputStream.flush();  
}  
收起阅读 »

获取已配对的蓝牙列表

蓝牙

function bluetooth_list(){  
    var main = plus.android.runtimeMainActivity();  
    var Context = plus.android.importClass("android.content.Context");  
    var lists = BAdapter.getBondedDevices();  
    plus.android.importClass(lists);  
    var resultDiv = document.getElementById('bluetooth_list');  
    var iterator = lists.iterator();  
    plus.android.importClass(iterator);  
    while (iterator.hasNext()) {  
            var d = iterator.next();  
            plus.android.importClass(d);  
        console.log(d.getAddress());  
    }  
}  
继续阅读 »

function bluetooth_list(){  
    var main = plus.android.runtimeMainActivity();  
    var Context = plus.android.importClass("android.content.Context");  
    var lists = BAdapter.getBondedDevices();  
    plus.android.importClass(lists);  
    var resultDiv = document.getElementById('bluetooth_list');  
    var iterator = lists.iterator();  
    plus.android.importClass(iterator);  
    while (iterator.hasNext()) {  
            var d = iterator.next();  
            plus.android.importClass(d);  
        console.log(d.getAddress());  
    }  
}  
收起阅读 »

该怎么判断是否已安装微信和QQ?

iOS 安装检测 qq 微信 Native.JS

苹果审核不过啊。很郁闷。
该怎么判断是否已安装微信和QQ?
找了好久也没找到方法

苹果审核不过啊。很郁闷。
该怎么判断是否已安装微信和QQ?
找了好久也没找到方法