最近有个需求,使用车牌识别,由于项目前期定型时使用的Html 5plus,使用的是上传图片到服务器然后调用百度的SDK把识别结果返回给前端,这个项目还是使用Hbuilder离线打包出来的版本,对前端是一知半解的,还是习惯使用AS来调试,然后就集成一个原生OCR版本的识别,后面遇到了一个问题,项目整体都是H5的,我得写个工具类提供方法跳转识别界面,并获取到返回结果,之前做的都是activity跳转activity,头次遇到这种H5直接调用原生方法去获取返回结果,后面查了资料找到了解决方法,直接上代码,下面是工具类里面的跳转识别activity的方法:
/**
* 识别方法
*
* @param context
*/
public static void doScan(Activity activity) {
Intent intent = new Intent(activity, PlateidCameraActivity.class);
//有拍照识别和视频识别,true是拍照识别,false是视频识别,需要携带参数到识别Activity
coreSetup.takePicMode = false;
intent.putExtra("coreSetup", coreSetup);
activity.startActivityForResult(intent, 1);
}
接下来是识别activity里获取识别结果后返回数据部分,这个部分都是常用的传参方法:
/***
* 获取到结果
* @param activity 实体类
* @param recogResult 识别结果
* @param savePicturePath 保存图片路径
*/
public void getResultFinish(Activity activity, String[] recogResult, int screenDirection, String savePicturePath) {
Intent intent = new Intent();
intent.putExtra("RecogResult", recogResult);
intent.putExtra("CarRecogResult", recogResult[0]);
intent.putExtra("CarColorRecogResult", recogResult[1]);
intent.putExtra("savePicturePath", savePicturePath);
intent.putExtra("screenDirection", screenDirection);
activity.setResult(RESULT_OK, intent);
activity.finish();
}
接下来就是H5代码中使用js调用原生方法并获取返回结果的代码:
var main = plus.android.runtimeMainActivity();
plus.android.invoke("com.print.PrintUtil", "doScan", main);
main.onActivityResult = function(requestCode, resultCode, data) {
if('1' == requestCode) {
plus.android.importClass(data);
var bundle=data.getExtras();
plus.android.importClass(bundle);
var carNumber = bundle.getString("CarRecogResult");
var carColor = bundle.getString("CarColorRecogResult");
var savePicturePath = bundle.getString("savePicturePath");
alert(carNumber+"dddd"+carColor+"dddd"+savePicturePath);
}
这些方法针对混合开发的朋友们估计都慵烂了,但是一直原生开发的朋友们估计没接触过,发出来做个记录,后面可以引申使用