
分享一个IM源码,基于Mui + Leancloud +个推
最近研究了一下即时通讯模块,做了一个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
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并传递参数
最近因为项目需要 要在网页中调起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插件的解决办法
由于我们的失误,导致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离线打包-第三方登录插件配置
目前登录插件支持新浪微博登录、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目录下;
- 生成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.有一个百度帐号
- 登录到http://developer.baidu.com/map/
- 然后选择右上角的API控制台。
- 创建应用我就不说了
- 然后安全码就是我们的 SHA1 + 包名;
- 我的是这样的:D0:84:C4:68:86:F3:E6:02:9F:DF:C4:0B:56:31:60:C0:01:4D:3D:B3;com.lipin
- 然后设置完成应用就不会有密匙不匹配的问题出现了。
谢谢大家
alongSefl
2015年8月15日 23:49:42
百度密匙申请
一、生成keystore
1.F:\Java\bin\keytool.exe配置到path里面(注:这里的路径要用自己的)。也可以cd到java\bin目录下;
- 生成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.有一个百度帐号
- 登录到http://developer.baidu.com/map/
- 然后选择右上角的API控制台。
- 创建应用我就不说了
- 然后安全码就是我们的 SHA1 + 包名;
- 我的是这样的:D0:84:C4:68:86:F3:E6:02:9F:DF:C4:0B:56:31:60:C0:01:4D:3D:B3;com.lipin
- 然后设置完成应用就不会有密匙不匹配的问题出现了。
谢谢大家
alongSefl
2015年8月15日 23:49:42

指昂平板 指纹识别接口
基于厂家提供的例子 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;
}
}
收起阅读 »

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离线打包-高德地图配置
高德地图配置
Linker Flags、framework等添加方法请参考这个文档
1.添加下列Linker Flags: -llibMap、-lAMapImp
- 添加下列framework: MAMapKit.framework、AMapSearchKit.framework、OpenGlES.framework、CoreLocation.framework
- 添加下列文件: AMap.bundle
4.申请key,如果没有key将会导致地图显示不出
参考高德地图key申请章节 - 打开Info.plist文件找到amap项,如果没有按图片中的格式添加该项,在下图中的红色区域输入申请的key
注意info.plist中Bundle identifier要和你输入的安全码一致
高德地图配置
Linker Flags、framework等添加方法请参考这个文档
1.添加下列Linker Flags: -llibMap、-lAMapImp
- 添加下列framework: MAMapKit.framework、AMapSearchKit.framework、OpenGlES.framework、CoreLocation.framework
- 添加下列文件: AMap.bundle
4.申请key,如果没有key将会导致地图显示不出
参考高德地图key申请章节 - 打开Info.plist文件找到amap项,如果没有按图片中的格式添加该项,在下图中的红色区域输入申请的key
注意info.plist中Bundle identifier要和你输入的安全码一致