HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

分享一个IM源码,基于Mui + Leancloud +个推

个推 IM

最近研究了一下即时通讯模块,做了一个IM模板。
比较了融云等三方IM模块,最终选择了Leancloud,主要是灵活强大,可以任意定制。
有一个棘手的问题是Android 4.4以下不支持WebSocket,不想用长轮询的方式workaround。
于是放弃了Leancloud的推送模块,把官方的个推集成进来替换推送模块。

发布V1.0.1版本,目前仅支持发送文本,还在不断完善中。

安卓APK安装包

继续阅读 »

最近研究了一下即时通讯模块,做了一个IM模板。
比较了融云等三方IM模块,最终选择了Leancloud,主要是灵活强大,可以任意定制。
有一个棘手的问题是Android 4.4以下不支持WebSocket,不想用长轮询的方式workaround。
于是放弃了Leancloud的推送模块,把官方的个推集成进来替换推送模块。

发布V1.0.1版本,目前仅支持发送文本,还在不断完善中。

安卓APK安装包

收起阅读 »

使用ajax能获取数据? 已经测试过mui、jq、js

ajax 问题已解决
mui.init();  
        mui.plusReady(function(){  
        console.log('beginTest');  
        muitest();  
        jqtest();  
        JStest();  
        });  

        function muitest(){  
                console.log('mui test begin');  
            mui.ajax('http://192.168.220.48/api/item',{  
                type:'get',  
                success:function(data){  
                    console.log('mui test success');  
                    console.log(data);  
                },  
                error:function(xhr,typestr,e){  
                    console.log('mui test error');  
                    console.log('mui test error: type='+typestr);  
                }  
            });  
            console.log('mui test end ');  
        }  
        function jqtest(){  
            console.log('jq test begin');  
            $.ajax({  
                url:'http://192.168.220.48/api/item',  
                type:'get',  
                success:function(data){  
                    console.log('jq test success');  
                    console.log(data);  
                },  
                error:function(xhr,state,e){  
                    console.log('jq test error');  
                    console.log('jq test error: state='+state);  
                }  
            });  
            console.log('jq test end ');  
        }  
        function JStest(){  
            console.log('js test begin');  
            var xhr=new XMLHttpRequest();  
            console.log('js test XMLHttpRequest init end');  
            xhr.onreadystatechange=function()  
                {  
                    console.log('js test stateChanged    '+xhr.readyState+'          '+xhr.status);  
                    if (xhr.readyState==4 && xhr.status==200)  
                    {  
                        console.log('success     '+xhr.responseText);  
                    }  
                }  
                console.log('js test set event end');  
                xhr.open('GET','http://192.168.220.48/api/item',true);  
                console.log('js test open end');  
                xhr.send();  
                console.log('js test send end');  
                console.log('js test end ');  
        }

[LOG] : beginTest
[LOG] : mui test begin
[LOG] : mui test end
[LOG] : jq test begin
[LOG] : jq test end
[LOG] : js test begin
[LOG] : js test XMLHttpRequest init end
[LOG] : js test set event end
[LOG] : js test stateChanged 1 0
[LOG] : js test open end
[LOG] : js test send end
[LOG] : js test end
--------等待超时后
[LOG] : mui test error
[LOG] : mui test error: type=abort
[LOG] : js test stateChanged 4 0

疑惑点
1/为什么onreadystatechange 事件只触发了两次
2/为什么第二次触发时 readyState=4 而status却是0

继续阅读 »
mui.init();  
        mui.plusReady(function(){  
        console.log('beginTest');  
        muitest();  
        jqtest();  
        JStest();  
        });  

        function muitest(){  
                console.log('mui test begin');  
            mui.ajax('http://192.168.220.48/api/item',{  
                type:'get',  
                success:function(data){  
                    console.log('mui test success');  
                    console.log(data);  
                },  
                error:function(xhr,typestr,e){  
                    console.log('mui test error');  
                    console.log('mui test error: type='+typestr);  
                }  
            });  
            console.log('mui test end ');  
        }  
        function jqtest(){  
            console.log('jq test begin');  
            $.ajax({  
                url:'http://192.168.220.48/api/item',  
                type:'get',  
                success:function(data){  
                    console.log('jq test success');  
                    console.log(data);  
                },  
                error:function(xhr,state,e){  
                    console.log('jq test error');  
                    console.log('jq test error: state='+state);  
                }  
            });  
            console.log('jq test end ');  
        }  
        function JStest(){  
            console.log('js test begin');  
            var xhr=new XMLHttpRequest();  
            console.log('js test XMLHttpRequest init end');  
            xhr.onreadystatechange=function()  
                {  
                    console.log('js test stateChanged    '+xhr.readyState+'          '+xhr.status);  
                    if (xhr.readyState==4 && xhr.status==200)  
                    {  
                        console.log('success     '+xhr.responseText);  
                    }  
                }  
                console.log('js test set event end');  
                xhr.open('GET','http://192.168.220.48/api/item',true);  
                console.log('js test open end');  
                xhr.send();  
                console.log('js test send end');  
                console.log('js test end ');  
        }

[LOG] : beginTest
[LOG] : mui test begin
[LOG] : mui test end
[LOG] : jq test begin
[LOG] : jq test end
[LOG] : js test begin
[LOG] : js test XMLHttpRequest init end
[LOG] : js test set event end
[LOG] : js test stateChanged 1 0
[LOG] : js test open end
[LOG] : js test send end
[LOG] : js test end
--------等待超时后
[LOG] : mui test error
[LOG] : mui test error: type=abort
[LOG] : js test stateChanged 4 0

疑惑点
1/为什么onreadystatechange 事件只触发了两次
2/为什么第二次触发时 readyState=4 而status却是0

收起阅读 »

网页中调起app并传递参数

Android

最近因为项目需要 要在网页中调起app并传递参数 ios请参考http://ask.dcloud.net.cn/article/64 Android官方并没有提示 但是我在本地打包的时候发现官方有配置 : <data android:scheme="hbuilder" /> 所以在网页中通过: <a class="button-download" href="hbuilder://你的参数"><span>启动app</span></a> 就可以启动app 在app中通过:mui.alert(plus.runtime.arguments,"参数","确定",function(){}); 获取 我折腾一早上 希望对大家有用

继续阅读 »

最近因为项目需要 要在网页中调起app并传递参数 ios请参考http://ask.dcloud.net.cn/article/64 Android官方并没有提示 但是我在本地打包的时候发现官方有配置 : <data android:scheme="hbuilder" /> 所以在网页中通过: <a class="button-download" href="hbuilder://你的参数"><span>启动app</span></a> 就可以启动app 在app中通过:mui.alert(plus.runtime.arguments,"参数","确定",function(){}); 获取 我折腾一早上 希望对大家有用

收起阅读 »

关于HBuilder6.3.1 插件安装找不到less插件的解决办法

插件 HBuilder less

由于我们的失误,导致less等插件在插件安装列表中看不到,如果需要这些插件,可按如下步骤进行安装
1.依次点击工具-插件安装-手动安装eclipse插件如下图


2.在插件地址中选择Hbuilder Update Plugins,勾掉group item by category,选择Less pro Compile Feature如下图

3.点击下一步进行安装,安装完毕后重启即可

继续阅读 »

由于我们的失误,导致less等插件在插件安装列表中看不到,如果需要这些插件,可按如下步骤进行安装
1.依次点击工具-插件安装-手动安装eclipse插件如下图


2.在插件地址中选择Hbuilder Update Plugins,勾掉group item by category,选择Less pro Compile Feature如下图

3.点击下一步进行安装,安装完毕后重启即可

收起阅读 »

iOS离线打包-第三方登录插件配置

App离线打包

目前登录插件支持新浪微博登录、QQ登录、微信登录
登录插件首先需要到各开放平台申请帐号,申请查看该文档
注: Linker Flags、framework等添加方法参考该文档

新浪登录插件配置

1.添加以下Linker Flags: -llibOauth、-lSinaWBOauth、-lWeiboSDK
2.添加下列文件:WeiboSDK.bundle
3.打开info.plist,找到sinweibo项,填入自己帐号的信息,如果没有该项,按照图中的格式创建


4.找到URL types ,打开URL identifier为com.weibo的项目,修改item0值为wb[这个是你的appkey] ,如果没有该项按照图中的格式创建

5.iOS9.0以上版本需要在info.plist增加以下配置

6.UIApplicationDelegate实现类中增加下列实现

- (BOOL)application:(UIApplication *)application  
            openURL:(NSURL *)url  
  sourceApplication:(NSString *)sourceApplication  
         annotation:(id)annotation {  
   [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}  

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
{  
    [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}

QQ登录插件配置

1.添加以下Linker Flags: -llibOauth、-lQQOauth
2.添加以下framwork: TencentOpenAPI.framework
3.添加下列文件: TencentOpenApi_IOS_Bundle.bundle
4.找到URL types,打开URL identifier为tencentopenapi的项目, 修改item0值为tencent[这个是你的appkey] ,如果没有该项按照图中的格式创建


5.iOS9.0以上版本需要在info.plist增加以下配置

或者直接拷贝以下内容:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>mqq</string>
<string>mqqapi</string>
<string>mqzone</string>
<string>wtloginmqq2</string>
<string>mqqopensdkapiV3</string>
<string>mqqwpa</string>
<string>mqqopensdkapiV2</string>
<string>mqqOpensdkSSoLogin</string>
</array>
6.UIApplicationDelegate实现类中增加下列实现

- (BOOL)application:(UIApplication *)application  
            openURL:(NSURL *)url  
  sourceApplication:(NSString *)sourceApplication  
         annotation:(id)annotation {  
   [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}  

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
{  
    [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}

微信登录插件配置

1.添加以下Linker Flags: -llibOauth、 -lWXOauth、-lWeChatSDK
2.添加以下framwork: Social.framework、Accounts.framework
3.找到URL types ,打开URL identifier为weixin的项目,修改item0值为wx[这个是你的appid] ,这个应该和下步weixinaouth中appid一致,如果没有该项按照图中的格式创建


4.打开info.plist,找到weixinoauth项,填入自己帐号的信息,如果没有该项,按照图中的格式创建

5.iOS9.0以上版本需要在info.plist增加以下配置

6.UIApplicationDelegate实现类中增加下列实现

- (BOOL)application:(UIApplication *)application  
            openURL:(NSURL *)url  
  sourceApplication:(NSString *)sourceApplication  
         annotation:(id)annotation {  
   [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}  

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
{  
    [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}

<a id="ulink"/>
7.HBuilderX2.3.4+版本需要配置 Universal Link
一 .启用通用链接请参考:https://ask.dcloud.net.cn/article/36393#unilink
二 .在info.plist root 节点添加UniversalLinks项,值和微信开放平台配置的一致,参考如下:


查看工程里的AppDelegate.m文件里是否有下面的方法:

//@Summary:通用链接
-(BOOL)application:(UIApplication )application continueUserActivity:(NSUserActivity )userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
[PDRCore handleSysEvent:PDRCoreSysEventContinueUserActivity withObject:userActivity];
restorationHandler(nil);
return YES;
}

苹果登录插件配置

点击查看

继续阅读 »

目前登录插件支持新浪微博登录、QQ登录、微信登录
登录插件首先需要到各开放平台申请帐号,申请查看该文档
注: Linker Flags、framework等添加方法参考该文档

新浪登录插件配置

1.添加以下Linker Flags: -llibOauth、-lSinaWBOauth、-lWeiboSDK
2.添加下列文件:WeiboSDK.bundle
3.打开info.plist,找到sinweibo项,填入自己帐号的信息,如果没有该项,按照图中的格式创建


4.找到URL types ,打开URL identifier为com.weibo的项目,修改item0值为wb[这个是你的appkey] ,如果没有该项按照图中的格式创建

5.iOS9.0以上版本需要在info.plist增加以下配置

6.UIApplicationDelegate实现类中增加下列实现

- (BOOL)application:(UIApplication *)application  
            openURL:(NSURL *)url  
  sourceApplication:(NSString *)sourceApplication  
         annotation:(id)annotation {  
   [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}  

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
{  
    [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}

QQ登录插件配置

1.添加以下Linker Flags: -llibOauth、-lQQOauth
2.添加以下framwork: TencentOpenAPI.framework
3.添加下列文件: TencentOpenApi_IOS_Bundle.bundle
4.找到URL types,打开URL identifier为tencentopenapi的项目, 修改item0值为tencent[这个是你的appkey] ,如果没有该项按照图中的格式创建


5.iOS9.0以上版本需要在info.plist增加以下配置

或者直接拷贝以下内容:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>mqq</string>
<string>mqqapi</string>
<string>mqzone</string>
<string>wtloginmqq2</string>
<string>mqqopensdkapiV3</string>
<string>mqqwpa</string>
<string>mqqopensdkapiV2</string>
<string>mqqOpensdkSSoLogin</string>
</array>
6.UIApplicationDelegate实现类中增加下列实现

- (BOOL)application:(UIApplication *)application  
            openURL:(NSURL *)url  
  sourceApplication:(NSString *)sourceApplication  
         annotation:(id)annotation {  
   [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}  

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
{  
    [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}

微信登录插件配置

1.添加以下Linker Flags: -llibOauth、 -lWXOauth、-lWeChatSDK
2.添加以下framwork: Social.framework、Accounts.framework
3.找到URL types ,打开URL identifier为weixin的项目,修改item0值为wx[这个是你的appid] ,这个应该和下步weixinaouth中appid一致,如果没有该项按照图中的格式创建


4.打开info.plist,找到weixinoauth项,填入自己帐号的信息,如果没有该项,按照图中的格式创建

5.iOS9.0以上版本需要在info.plist增加以下配置

6.UIApplicationDelegate实现类中增加下列实现

- (BOOL)application:(UIApplication *)application  
            openURL:(NSURL *)url  
  sourceApplication:(NSString *)sourceApplication  
         annotation:(id)annotation {  
   [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}  

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
{  
    [PDRCore handleSysEvent:PDRCoreSysEventOpenURL withObject:url];  
    return YES;  
}

<a id="ulink"/>
7.HBuilderX2.3.4+版本需要配置 Universal Link
一 .启用通用链接请参考:https://ask.dcloud.net.cn/article/36393#unilink
二 .在info.plist root 节点添加UniversalLinks项,值和微信开放平台配置的一致,参考如下:


查看工程里的AppDelegate.m文件里是否有下面的方法:

//@Summary:通用链接
-(BOOL)application:(UIApplication )application continueUserActivity:(NSUserActivity )userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
[PDRCore handleSysEvent:PDRCoreSysEventContinueUserActivity withObject:userActivity];
restorationHandler(nil);
return YES;
}

苹果登录插件配置

点击查看

收起阅读 »

百度地图密匙申请

百度密匙申请
一、生成keystore
1.F:\Java\bin\keytool.exe配置到path里面(注:这里的路径要用自己的)。也可以cd到java\bin目录下;

  1. 生成keystore的命令
    keytool -genkey -alias test.keystore -keyalg RSA -validity 20000 -keystore test.keystore
    下面是我的命令:
    /***/

/*/
keytool -list -v -keystore debug.keystore
二、获取sha1值
命令:
keytool -list -v -keystore test.keystore
下面是我的命令了
/***
/

/****/
我们需要的是这一段
SHA1: D0:84:C4:68:86:F3:E6:02:9F:DF:C4:0B:56:31:60:C0:01:4D:3D:B3

三。在线打包方面如下图

包名按照规范定义这里报名很重要要记住 如:com.lipin
证书别名的话上面获取sha1值的时候已经有了 我的是test.keystore 其实就是文件名
密码:就是生成keystore的时候这只的密码
证书文件的话选中生成的那个证书文件就可以了

四、百度方面的配置
1.有一个百度帐号

  1. 登录到http://developer.baidu.com/map/
  2. 然后选择右上角的API控制台。
  3. 创建应用我就不说了
  4. 然后安全码就是我们的 SHA1 + 包名;
  5. 我的是这样的:D0:84:C4:68:86:F3:E6:02:9F:DF:C4:0B:56:31:60:C0:01:4D:3D:B3;com.lipin
  6. 然后设置完成应用就不会有密匙不匹配的问题出现了。

谢谢大家
alongSefl
2015年8月15日 23:49:42

继续阅读 »

百度密匙申请
一、生成keystore
1.F:\Java\bin\keytool.exe配置到path里面(注:这里的路径要用自己的)。也可以cd到java\bin目录下;

  1. 生成keystore的命令
    keytool -genkey -alias test.keystore -keyalg RSA -validity 20000 -keystore test.keystore
    下面是我的命令:
    /***/

/*/
keytool -list -v -keystore debug.keystore
二、获取sha1值
命令:
keytool -list -v -keystore test.keystore
下面是我的命令了
/***
/

/****/
我们需要的是这一段
SHA1: D0:84:C4:68:86:F3:E6:02:9F:DF:C4:0B:56:31:60:C0:01:4D:3D:B3

三。在线打包方面如下图

包名按照规范定义这里报名很重要要记住 如:com.lipin
证书别名的话上面获取sha1值的时候已经有了 我的是test.keystore 其实就是文件名
密码:就是生成keystore的时候这只的密码
证书文件的话选中生成的那个证书文件就可以了

四、百度方面的配置
1.有一个百度帐号

  1. 登录到http://developer.baidu.com/map/
  2. 然后选择右上角的API控制台。
  3. 创建应用我就不说了
  4. 然后安全码就是我们的 SHA1 + 包名;
  5. 我的是这样的:D0:84:C4:68:86:F3:E6:02:9F:DF:C4:0B:56:31:60:C0:01:4D:3D:B3;com.lipin
  6. 然后设置完成应用就不会有密匙不匹配的问题出现了。

谢谢大家
alongSefl
2015年8月15日 23:49:42

收起阅读 »

指昂平板 指纹识别接口

技术分享 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要和你输入的安全码一致
收起阅读 »