最近有個需求,使用車牌識別,由於項目前期定型時使用的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);
}
這些方法針對混合開發的朋友們估計都慵爛了,但是一直原生開發的朋友們估計沒接觸過,發出來做個記錄,後面可以引申使用