日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汉王云名片识别(SM)组件开发详解

發(fā)布時間:2023/11/30 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汉王云名片识别(SM)组件开发详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大家好,最近在DeviceOne平臺上做了一個漢王云名片識別的功能組件。下面把我開發(fā)過程給大家做一個分享,希望可以幫助到大家。

?

下面我把我的思路給大家講解一下。 1.找到我要集成的sdk,也就是漢王云名片的sdk下載(android和ios)和文檔下載。 2.閱讀sdk的官方demo 3.在deviceone上面創(chuàng)建組件 4.編寫組件的屬性、事件、方法。 5.下載組件的項目 6.編碼 7.上傳zip包 8.編寫示例進行調(diào)試 9.完成。 下面我就按照上面的順序來依次講解。 1.找到我要集成的sdk,也就是漢王云名片的sdk下載(android和ios)和文檔下載。 打開http://developer.hanvon.com/,開發(fā)者中心,注冊了一個賬號,然后選擇我要開發(fā)的sdk頁面進行示例demo下載http://developer.hanvon.com/api/toAPIinfo.do?id=2。 2.閱讀sdk的官方demo并申請相關(guān)的android的key和ios的key 下面我分兩個平臺給大家講解下代碼: Android: 我們看下上面的圖片,這個是官方給的例子,一共就一個類 ,這樣我們直接看代碼。

public?class?MainActivity?extends?Activity {

?

private?Button?button1;

private?Button?button2;

private?ImageView?iv_image; ?

private?TextView?testView;

private?ProgressDialog?pd;

private?DiscernHandler?discernHandler;

?

String?picPath?=?null;

String?result?=?null;

private?HWCloudManager?hwCloudManagerBcard;?

?

@Override

protected?void?onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);?//remove title bar

setContentView(R.layout.activity_main);

?

?

/**

* your_android_key? 是您在開發(fā)者中心申請的android_key 并 申請了云身份證識別服務(wù)

* 開發(fā)者中心:http://developer.hanvon.com/

*/

hwCloudManagerBcard?=?new?HWCloudManager(this,?"your_android_key");

?

?

?

discernHandler?=?new?DiscernHandler();

?

button1?= (Button) findViewById(R.id.button1);

button2?= (Button) findViewById(R.id.button2);

iv_image?= (ImageView) findViewById(R.id.iv_image);

testView?= (TextView) findViewById(R.id.result);

?

button1.setOnClickListener(listener);

button2.setOnClickListener(listener);

}

?

OnClickListener?listener?=?new?OnClickListener() {

? ? ? ??@Override

? ? ? ??public?void?onClick(View view) {

? ? ? ? ? ??switch?(view.getId()) {

? ? ? ? ? ??case?R.id.button1:

? ? ? ? ? ??// 激活系統(tǒng)圖庫,選擇一張圖片

? ? ? ? ? ??Intent intent =?new?Intent();

? ? ? ? ? ??intent.setAction(Intent.ACTION_PICK);

? ? ? ? ? ??intent.setType("image/*");

? ? ? ? ? ??startActivityForResult(intent, 0);

? ? ? ? ? ??break;

?? ? ? ? ? ?

? ? ? ? ? ??case?R.id.button2:

? ? ? ? ? ??//識別

? ? ? ? ? ??testView.setText("");

? ? ? ? ? ??ConnectionDetector connectionDetector =?new?ConnectionDetector(getApplication());

? ? ? ??if?(connectionDetector.isConnectingTOInternet()) {

? ? ? ??if?(null?!=?picPath) {

? ? ? ??pd?= ProgressDialog.show(MainActivity.this,?"",?"正在識別請稍后......");

? ? ? ? ? ? ? ? ? ??DiscernThread discernThread =?new?DiscernThread();

? ? ? ? ? ? ? ? ? ??new?Thread(discernThread).start();

? ? ? ??}?else?{

? ??Toast.makeText(getApplication(),?"請選擇圖片后再試", Toast.LENGTH_LONG).show();

? ??}

? ? ? ??}?else?{

? ? ? ??Toast.makeText(getApplication(),?"網(wǎng)絡(luò)連接失敗,請檢查網(wǎng)絡(luò)后重試!", Toast.LENGTH_LONG).show();

? ? ? ??}

?? ? ? ? ? ?

?? ? ? ? ? ?

? ? ? ? ? ??break;

? ? ? ? ? ? }

? ? ? ? }

};

?

public?class?DiscernThread?implements?Runnable{

?

@Override

public?void?run() {

try?{

/**

* 調(diào)用漢王云名片識別方法

*/

result?=?hwCloudManagerBcard.cardLanguage("chns",?picPath);

// result = hwCloudManagerBcard.cardLanguage4Https("chns", picPath);?

}?catch?(Exception e) {

//?TODO: handle exception

}

Bundle mBundle =?new?Bundle();

mBundle.putString("responce",?result);

Message msg =?new?Message();

msg.setData(mBundle);

discernHandler.sendMessage(msg);

}

}

?

public?class?DiscernHandler?extends?Handler {

@Override

public?void?handleMessage(Message msg) {

super.handleMessage(msg);

pd.dismiss();

Bundle bundle = msg.getData();

String responce = bundle.getString("responce");

testView.setText(responce);

}

}

?

@Override??

? ??protected?void?onActivityResult(int?requestCode,?int?resultCode, Intent data) { ?

? ? ? ??if?(data !=?null) { ?

? ? ? ? ? ? Uri uri = data.getData();

? ? ? ? ? ? String[] proj = { MediaStore.Images.Media.DATA?};

? ? ? ??Cursor cursor = getContentResolver().query(uri, proj,?null,?null,?null);

? ? ? ??int?column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

? ? ? ??cursor.moveToFirst();

? ? ? ??picPath?= cursor.getString(column_index);

? ? ? ??System.out.println(picPath);

?? ? ? ?

? ? ? ??final?BitmapFactory.Options options =?new?BitmapFactory.Options();

? ? options.inJustDecodeBounds?=?true;

? ? BitmapFactory.decodeFile(picPath, options);

? ? options.inSampleSize?= BitmapUtil.calculateInSampleSize(options, 1280, 720);

? ? options.inJustDecodeBounds?=?false;

? ? Bitmap bitmap = BitmapFactory.decodeFile(picPath, options);

? ? ? ??iv_image.setImageBitmap(bitmap);

? ? ? ? } ?

? ? ? ??super.onActivityResult(requestCode, resultCode, data); ?

? ? }

?

}

上面就是官方給的代碼,我們可以看到,整個過程就是:首先后去一個圖片,也就是名片的照片,然后就是通過云端去處理這個圖片,然后返回一個json值,就是我們要的結(jié)果了。那么我們直接看部分代碼解析。

// 激活系統(tǒng)圖庫,選擇一張圖片

? ? ? ? ? ??Intent intent =?new?Intent();

? ? ? ? ? ??intent.setAction(Intent.ACTION_PICK);

? ? ? ? ? ??intent.setType("image/*");

? ? ? ? ? ??startActivityForResult(intent, 0);

選擇一個圖片,并獲取返回的地址。

//識別

? ? ? ? ? ??testView.setText("");

? ? ? ? ? ??ConnectionDetector connectionDetector =?new?ConnectionDetector(getApplication());

? ? ? ??if?(connectionDetector.isConnectingTOInternet()) {

? ? ? ??if?(null?!=?picPath) {

? ? ? ??pd?= ProgressDialog.show(MainActivity.this,?"",?"正在識別請稍后......");

? ? ? ? ? ? ? ? ? ??DiscernThread discernThread =?new?DiscernThread();

? ? ? ? ? ? ? ? ? ??new?Thread(discernThread).start();

? ? ? ??}?else?{

? ??Toast.makeText(getApplication(),?"請選擇圖片后再試", Toast.LENGTH_LONG).show();

? ??}

? ? ? ??}?else?{

? ? ? ??Toast.makeText(getApplication(),?"網(wǎng)絡(luò)連接失敗,請檢查網(wǎng)絡(luò)后重試!", Toast.LENGTH_LONG).show();

? ? ? ??}

進行識別。

從上面兩個代碼我們可以看出,整個sdk的核心部分就是這兩塊,這樣,我們就了解了整個sdk的核心東西了。

?

IOS:

下面我們看下ios的項目目錄

上面就是目錄結(jié)構(gòu),非常簡單。廢話不多說,我們直接看代碼。

#import?"ViewController.h"

#import?"HWCloudsdk.h"

@interface?ViewController?()

?

@end

?

@implementation?ViewController

?

- (void)viewDidLoad {

? ? [super?viewDidLoad];

? ??HWCloudsdk?*sdk = [[HWCloudsdk?alloc]init];

? ??UIImage?*cardImg = [UIImage?imageNamed:@"cardimage.jpg"];

?? ?

? ??//apiKey?需要您到developer.hanvon.com?自行申請

? ??NSString?*apiKey =?@"your - ios - key";

?? ?

? ? [sdk?cardLanguage:@"auto"?cardImage:cardImg?apiKey:apiKey?successBlock:^(id?responseObject) {

? ? ? ??NSLog(@"%@",responseObject);

? ? }?failureBlock:^(NSError?*error) {

? ? ? ??NSLog(@"%@",error);

? ? }];

? ??//? ? NSString *str = [sdk cardLanguage:@"chns" cardImage:cardImg apiKey:apiKey];

? ??//? ? NSLog(@"返回的結(jié)果是?: %@",str);

? ??// Do any additional setup after loading the view, typically from a nib.

?

}

?

- (void)didReceiveMemoryWarning {

? ? [super?didReceiveMemoryWarning];

? ??// Dispose of any resources that can be recreated.

?

}

以上就是代碼,非常的簡單,就幾句話。我們來分析一下。

HWCloudsdk?*sdk = [[HWCloudsdk?alloc]init];

? ??UIImage?*cardImg = [UIImage?imageNamed:@"cardimage.jpg"];

?? ?

? ??//apiKey?需要您到developer.hanvon.com?自行申請

? ??NSString?*apiKey =?@"your - ios - key";

?? ?

? ? [sdk?cardLanguage:@"auto"?cardImage:cardImg?apiKey:apiKey?successBlock:^(id?responseObject) {

? ? ? ??NSLog(@"%@",responseObject);

? ? }?failureBlock:^(NSError?*error) {

? ? ? ??NSLog(@"%@",error);

? ? }];

上面這段代碼就是整個核心,我們看一下,就是獲取一個圖片,然后通過圖片去云端解析,更加簡潔。

?

這樣我們就解讀好了sdk的demo,也知道如何來使用了。

?

3.在deviceone上面創(chuàng)建組件

我覺得這個可以省略的,那我直接用文字來描述一下吧。

創(chuàng)建賬號-開發(fā)者中心-組件開發(fā)-創(chuàng)建組件-填寫信息-保存。

搞定。

?

4.編寫組件的屬性、事件、方法。

通過我們上面的閱讀sdk的demo,我們可以非常清晰的知道了我們需要如何來調(diào)用,那么我就定義一個方法就可以了

在這里面我定義的方法為getInfo方法,我給這個方法的一個參數(shù)為imgUrl,也就是需要一個圖片的路徑。

下面我直接上圖,給大家看看我的配置。

這個就是我配置好的,供大家參考。

?

5.下載組件的項目

通過步驟4的編寫,我們現(xiàn)在就可以去下載組件開發(fā)項目了。

?

6.編碼

這個章節(jié)大家可能是最關(guān)心的一節(jié),那我細一點講解。我分兩個平臺講解:

Android:

我們先看下載好的項目并且導入到我的ADT中(這個地方大家可以使用自己的eclipse開發(fā)),看下項目圖

?

上面就是我導入之后的項目目錄,下面進行一下目錄的講解:

doext文件下下面的所有文件都是官方生成好的,也是我們這次開發(fā)組件編寫代碼的文件夾。

dotest.module這個文件夾是用于我們進行原生測試組件的屬性、事件、方法的。這個后續(xù)會使用到,請繼續(xù)往下看。

我們接下來打開doext/implement/組件名_Model.java文件。(因為我們是一個sm組件,所以有這樣一個文件。)

我們下面來看看這個文件的代碼:

public?class?M1294_hwymp_Model?extends?DoSingletonModule?implements?M1294_hwymp_IMethod{

?

public?M1294_hwymp_Model()?throws?Exception {

super();

}

?

/**

*?同步方法,JS腳本調(diào)用該組件對象方法時會被調(diào)用,可以根據(jù)_methodName調(diào)用相應的接口實現(xiàn)方法;

* @_methodName?方法名稱

* @_dictParas?參數(shù)(K,V),獲取參數(shù)值使用API提供DoJsonHelper類;

* @_scriptEngine?當前Page JS上下文環(huán)境對象

* @_invokeResult?用于返回方法結(jié)果對象

*/

@Override

public?boolean?invokeSyncMethod(String _methodName, JSONObject _dictParas,

DoIScriptEngine _scriptEngine, DoInvokeResult _invokeResult)

throws?Exception {

//...do something

return?super.invokeSyncMethod(_methodName, _dictParas, _scriptEngine, _invokeResult);

}

?

/**

*?異步方法(通常都處理些耗時操作,避免UI線程阻塞),JS腳本調(diào)用該組件對象方法時會被調(diào)用,

*?可以根據(jù)_methodName調(diào)用相應的接口實現(xiàn)方法;

* @_methodName?方法名稱

* @_dictParas?參數(shù)(K,V),獲取參數(shù)值使用API提供DoJsonHelper類;

* @_scriptEngine?當前page JS上下文環(huán)境

* @_callbackFuncName?回調(diào)函數(shù)名

* #如何執(zhí)行異步方法回調(diào)?可以通過如下方法:

* _scriptEngine.callback(_callbackFuncName, _invokeResult);

*?參數(shù)解釋:@_callbackFuncName回調(diào)函數(shù)名,@_invokeResult傳遞回調(diào)函數(shù)參數(shù)對象;

*?獲取DoInvokeResult對象方式new DoInvokeResult(this.getUniqueKey());

*/

@Override

public?boolean?invokeAsyncMethod(String _methodName, JSONObject _dictParas,

DoIScriptEngine _scriptEngine, String _callbackFuncName)throws?Exception {

//...do something

return?super.invokeAsyncMethod(_methodName, _dictParas, _scriptEngine, _callbackFuncName);

}

?

?

/**

*?獲取名片信息;

* @_dictParas?參數(shù)(K,V),可以通過此對象提供相關(guān)方法來獲取參數(shù)值(Key:為參數(shù)名稱);

* @_scriptEngine?當前Page JS上下文環(huán)境對象

* @_callbackFuncName?回調(diào)函數(shù)名

*/

@Override

public?void?getInfo(JSONObject _dictParas, DoIScriptEngine _scriptEngine,String _callbackFuncName) {

?

}

?

}

整個這個代碼是我們定義好組件之后,官方生成好的,經(jīng)過閱讀,我們看到這個代碼的中文解析已經(jīng)很清晰了,那我在這里在解析一下,

里面有兩個方法,一個是同步方法,一個是異步方法,這個是根據(jù)我們定義的組件的方法性質(zhì)來說的,但是一般建議使用異步方法,這樣不會出現(xiàn)

屏幕卡頓的現(xiàn)象,我用的是異步方法。所以下面的編程,我就在異步方法里面編寫就可以了。

還有一個就是getInfo這個方法,看到這個方法很熟悉吧,因為是我們在組件里面定義過的,就是這個方法,看來我們要定義自己的邏輯就要在這個方法

里面寫了,這樣我們就清晰的知道了我們要寫組件代碼的去處了。

下一步就是我們開始寫了。

/**

*?異步方法(通常都處理些耗時操作,避免UI線程阻塞),JS腳本調(diào)用該組件對象方法時會被調(diào)用,

*?可以根據(jù)_methodName調(diào)用相應的接口實現(xiàn)方法;

* @_methodName?方法名稱

* @_dictParas?參數(shù)(K,V),獲取參數(shù)值使用API提供DoJsonHelper類;

* @_scriptEngine?當前page JS上下文環(huán)境

* @_callbackFuncName?回調(diào)函數(shù)名

* #如何執(zhí)行異步方法回調(diào)?可以通過如下方法:

* _scriptEngine.callback(_callbackFuncName, _invokeResult);

*?參數(shù)解釋:@_callbackFuncName回調(diào)函數(shù)名,@_invokeResult傳遞回調(diào)函數(shù)參數(shù)對象;

*?獲取DoInvokeResult對象方式new DoInvokeResult(this.getUniqueKey());

*/

@Override

public?boolean?invokeAsyncMethod(String _methodName, JSONObject _dictParas,

DoIScriptEngine _scriptEngine, String _callbackFuncName)throws?Exception {

if("getInfo".equals(_methodName))

{

getInfo(_dictParas, _scriptEngine, _callbackFuncName);

?

}

return?super.invokeAsyncMethod(_methodName, _dictParas, _scriptEngine, _callbackFuncName);

?

}

看上面的代碼,我把我寫的這段話標注為紅色了,大家可以看的清楚一下,我寫這段話的目的就是要判斷一下我傳入的方法進行相應的調(diào)用,

也就是說我們通常寫組件的時候,這個地方可能會有好幾個方法,所以這個地方會有好幾個判斷的。這樣講大家就清楚了。

下面,我們就把之前的demo的代碼直接拷貝到當前的項目中,然后倒入jar包(這個不講了,如果不會可以百度倒入jar包)。直接代碼

public?class?M1294_hwymp_Model?extends?DoSingletonModule?implements?M1294_hwymp_IMethod{

?? ?

?? ?

? ??private?Button button1;

? ??private?Button button2;

? ??private?ImageView iv_image;

? ??private?TextView testView;

? ??private?ProgressDialog pd;

? ??private?DiscernHandler discernHandler;

?? ?

? ? String picPath =?null;

? ? String result =?null;

? ??private?HWCloudManager hwCloudManagerBcard;

?

public?M1294_hwymp_Model()?throws?Exception {

super();

}

?

/**

*?同步方法,JS腳本調(diào)用該組件對象方法時會被調(diào)用,可以根據(jù)_methodName調(diào)用相應的接口實現(xiàn)方法;

* @_methodName?方法名稱

* @_dictParas?參數(shù)(K,V),獲取參數(shù)值使用API提供DoJsonHelper類;

* @_scriptEngine?當前Page JS上下文環(huán)境對象

* @_invokeResult?用于返回方法結(jié)果對象

*/

@Override

public?boolean?invokeSyncMethod(String _methodName, JSONObject _dictParas,

DoIScriptEngine _scriptEngine, DoInvokeResult _invokeResult)

throws?Exception {

//...do something

return?super.invokeSyncMethod(_methodName, _dictParas, _scriptEngine, _invokeResult);

}

?

/**

*?異步方法(通常都處理些耗時操作,避免UI線程阻塞),JS腳本調(diào)用該組件對象方法時會被調(diào)用,

*?可以根據(jù)_methodName調(diào)用相應的接口實現(xiàn)方法;

* @_methodName?方法名稱

* @_dictParas?參數(shù)(K,V),獲取參數(shù)值使用API提供DoJsonHelper類;

* @_scriptEngine?當前page JS上下文環(huán)境

* @_callbackFuncName?回調(diào)函數(shù)名

* #如何執(zhí)行異步方法回調(diào)?可以通過如下方法:

* _scriptEngine.callback(_callbackFuncName, _invokeResult);

*?參數(shù)解釋:@_callbackFuncName回調(diào)函數(shù)名,@_invokeResult傳遞回調(diào)函數(shù)參數(shù)對象;

*?獲取DoInvokeResult對象方式new DoInvokeResult(this.getUniqueKey());

*/

@Override

public?boolean?invokeAsyncMethod(String _methodName, JSONObject _dictParas,

DoIScriptEngine _scriptEngine, String _callbackFuncName)throws?Exception {

//...do something

return?super.invokeAsyncMethod(_methodName, _dictParas, _scriptEngine, _callbackFuncName);

}

?

?

/**

*?獲取名片信息;

* @_dictParas?參數(shù)(K,V),可以通過此對象提供相關(guān)方法來獲取參數(shù)值(Key:為參數(shù)名稱);

* @_scriptEngine?當前Page JS上下文環(huán)境對象

* @_callbackFuncName?回調(diào)函數(shù)名

*/

@Override

public?void?getInfo(JSONObject _dictParas, DoIScriptEngine _scriptEngine,String _callbackFuncName) {

? ? ? ? hwCloudManagerBcard =?new?HWCloudManager(this,?"your_android_key");

?? ? ? ?

?? ? ? ?

?? ? ? ?

? ? ? ? discernHandler =?new?DiscernHandler();

?? ? ? ?

? ? ? ??button1 = (Button) findViewById(R.id.button1);

? ? ? ? button2 = (Button) findViewById(R.id.button2);

? ? ? ? iv_image = (ImageView) findViewById(R.id.iv_image);

? ? ? ? testView = (TextView) findViewById(R.id.result);

?? ? ? ?

? ? ? ? button1.setOnClickListener(listener);

? ? ? ? button2.setOnClickListener(listener);

}

?? ?

? ??OnClickListener listener =?new?OnClickListener() {

? ? @Override

? ??public?void?onClick(View view) {

? ??switch?(view.getId()) {

case?R.id.button1:

? ??//?激活系統(tǒng)圖庫,選擇一張圖片

? ? Intent intent =?new?Intent();

? ? intent.setAction(Intent.ACTION_PICK);

? ? intent.setType("image/*");

? ? startActivityForResult(intent,?0);

? ??break;

?? ?

case?R.id.button2:

? ??//識別

? ??testView.setText("");

? ? ConnectionDetector connectionDetector =?new?ConnectionDetector(getApplication());

? ??if?(connectionDetector.isConnectingTOInternet()) {

? ? ? ??if?(null?!= picPath) {

? ? ? ??pd = ProgressDialog.show(MainActivity.this,?"",?"正在識別請稍后......");

? ? ? ? ? ? DiscernThread discernThread =?new?DiscernThread();

? ? ? ? ? ??new?Thread(discernThread).start();

? ? ? ? }?else?{

? ? ? ? ? ? Toast.makeText(getApplication(),?"請選擇圖片后再試", Toast.LENGTH_LONG).show();

? ??}

? ? }?else?{

? ? ? ? Toast.makeText(getApplication(),?"網(wǎng)絡(luò)連接失敗,請檢查網(wǎng)絡(luò)后重試!", Toast.LENGTH_LONG).show();

? ? }

?? ?

?? ?

? ??break;

}

}

};

?

public?class?DiscernThread?implements?Runnable{

?? ?

? ? @Override

? ??public?void?run() {

? ? ? ??try?{

? ? ? ? ? ??/**

?? ? ? ? ? ? *?調(diào)用漢王云名片識別方法

?? ? ? ? ? ? */

? ? ? ? ? ? result = hwCloudManagerBcard.cardLanguage("chns", picPath);

? ? ? ? ? ??// result = hwCloudManagerBcard.cardLanguage4Https("chns", picPath);

? ? ? ? }?catch?(Exception e) {

? ? ? ? ? ??// TODO: handle exception

? ? ? ? }

? ? ? ? Bundle mBundle =?new?Bundle();

? ? ? ? mBundle.putString("responce", result);

? ? ? ? Message msg =?new?Message();

? ? ? ? msg.setData(mBundle);

? ? ? ? discernHandler.sendMessage(msg);

? ? }

}

?

public?class?DiscernHandler?extends?Handler {

? ? @Override

? ??public?void?handleMessage(Message msg) {

? ? ? ??super.handleMessage(msg);

? ? ? ? pd.dismiss();

? ? ? ? Bundle bundle = msg.getData();

? ? ? ? String responce = bundle.getString("responce");

? ? ? ? testView.setText(responce);

? ? }

}

?

@Override

protected?void?onActivityResult(int?requestCode,?int?resultCode, Intent data) {

if?(data !=?null) {

Uri uri = data.getData();

//閫氳繃uri鑾峰彇鍥劇墖璺

String[] proj = { MediaStore.Images.Media.DATA };

Cursor cursor = getContentResolver().query(uri, proj,?null,?null,?null);

int?column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

cursor.moveToFirst();

picPath = cursor.getString(column_index);

System.out.println(picPath);

?

final?BitmapFactory.Options options =?new?BitmapFactory.Options();

options.inJustDecodeBounds =?true;

BitmapFactory.decodeFile(picPath, options);

options.inSampleSize = BitmapUtil.calculateInSampleSize(options,?1280,?720);

options.inJustDecodeBounds =?false;

Bitmap bitmap = BitmapFactory.decodeFile(picPath, options);

iv_image.setImageBitmap(bitmap);

}

super.onActivityResult(requestCode, resultCode, data);

}

?

}

上面的代碼,標記為紫色的是我第一次要去掉的代碼,原因:因為我是直接傳入的照片的地址,所以跟照片有關(guān)系的我都不需要了。

public?class?M1294_hwymp_Model?extends?DoSingletonModule?implements?M1294_hwymp_IMethod{

?? ?

?? ?

? ??private?DiscernHandler discernHandler;

?? ?

? ? String picPath =?null;

? ? String result =?null;

? ??private?HWCloudManager hwCloudManagerBcard;

?

public?M1294_hwymp_Model()?throws?Exception {

super();

}

?

/**

*?同步方法,JS腳本調(diào)用該組件對象方法時會被調(diào)用,可以根據(jù)_methodName調(diào)用相應的接口實現(xiàn)方法;

* @_methodName?方法名稱

* @_dictParas?參數(shù)(K,V),獲取參數(shù)值使用API提供DoJsonHelper類;

* @_scriptEngine?當前Page JS上下文環(huán)境對象

* @_invokeResult?用于返回方法結(jié)果對象

*/

@Override

public?boolean?invokeSyncMethod(String _methodName, JSONObject _dictParas,

DoIScriptEngine _scriptEngine, DoInvokeResult _invokeResult)

throws?Exception {

//...do something

return?super.invokeSyncMethod(_methodName, _dictParas, _scriptEngine, _invokeResult);

}

?

/**

*?異步方法(通常都處理些耗時操作,避免UI線程阻塞),JS腳本調(diào)用該組件對象方法時會被調(diào)用,

*?可以根據(jù)_methodName調(diào)用相應的接口實現(xiàn)方法;

* @_methodName?方法名稱

* @_dictParas?參數(shù)(K,V),獲取參數(shù)值使用API提供DoJsonHelper類;

* @_scriptEngine?當前page JS上下文環(huán)境

* @_callbackFuncName?回調(diào)函數(shù)名

* #如何執(zhí)行異步方法回調(diào)?可以通過如下方法:

* _scriptEngine.callback(_callbackFuncName, _invokeResult);

*?參數(shù)解釋:@_callbackFuncName回調(diào)函數(shù)名,@_invokeResult傳遞回調(diào)函數(shù)參數(shù)對象;

*?獲取DoInvokeResult對象方式new DoInvokeResult(this.getUniqueKey());

*/

@Override

public?boolean?invokeAsyncMethod(String _methodName, JSONObject _dictParas,

DoIScriptEngine _scriptEngine, String _callbackFuncName)throws?Exception {

? ? ? ??if("getInfo".equals(_methodName))

? ? ? ? {

? ? ? ? ? ? getInfo(_dictParas, _scriptEngine, _callbackFuncName);

? ? ? ? }

return?super.invokeAsyncMethod(_methodName, _dictParas, _scriptEngine, _callbackFuncName);

}

?

?

/**

*?獲取名片信息;

* @_dictParas?參數(shù)(K,V),可以通過此對象提供相關(guān)方法來獲取參數(shù)值(Key:為參數(shù)名稱);

* @_scriptEngine?當前Page JS上下文環(huán)境對象

* @_callbackFuncName?回調(diào)函數(shù)名

*/

@Override

public?void?getInfo(JSONObject _dictParas, DoIScriptEngine _scriptEngine,String _callbackFuncName) {

? ? ? ? hwCloudManagerBcard =?new?HWCloudManager(this,?"your_android_key");

? ? ? ? discernHandler =?new?DiscernHandler();

? ? ? ? ConnectionDetector connectionDetector =?new?ConnectionDetector(getApplication());

? ? ? ??if?(connectionDetector.isConnectingTOInternet()) {

? ? ? ? ? ??if?(null?!= picPath) {

? ? ? ? ? ? ? ? DiscernThread discernThread =?new?DiscernThread();

? ? ? ? ? ? ? ??new?Thread(discernThread).start();

? ? ? ? ? ? }?else?{

? ? ? ? ? ? ? ? Toast.makeText(getApplication(),?"請選擇圖片后再試", Toast.LENGTH_LONG).show();

? ? ? ? ? ? }

? ? ? ? }?else?{

? ? ? ? ? ? Toast.makeText(getApplication(),?"網(wǎng)絡(luò)連接失敗,請檢查網(wǎng)絡(luò)后重試!", Toast.LENGTH_LONG).show();

? ? ? ? }

}

}

};

?

public?class?DiscernThread?implements?Runnable{

?? ?

? ? @Override

? ??public?void?run() {

? ? ? ??try?{

? ? ? ? ? ??/**

?? ? ? ? ? ? *?調(diào)用漢王云名片識別方法

?? ? ? ? ? ? */

? ? ? ? ? ? result = hwCloudManagerBcard.cardLanguage("chns", picPath);

? ? ? ? ? ??// result = hwCloudManagerBcard.cardLanguage4Https("chns", picPath);

? ? ? ? }?catch?(Exception e) {

? ? ? ? ? ??// TODO: handle exception

? ? ? ? }

? ? ? ? Bundle mBundle =?new?Bundle();

? ? ? ? mBundle.putString("responce", result);

? ? ? ? Message msg =?new?Message();

? ? ? ? msg.setData(mBundle);

? ? ? ? discernHandler.sendMessage(msg);

? ? }

}

?

public?class?DiscernHandler?extends?Handler {

? ? @Override

? ??public?void?handleMessage(Message msg) {

? ? ? ??super.handleMessage(msg);

? ? ? ? pd.dismiss();

? ? ? ? Bundle bundle = msg.getData();

? ? ? ? String responce = bundle.getString("responce");

? ? ? ? testView.setText(responce);

? ? }

}

?

?

}

上面這段代碼基本是我去掉后的代碼,看起來好像是沒什么問題,那我們在看看,在精簡一下。

public?class?M1294_hwymp_Model?extends?DoSingletonModule?implements?M1294_hwymp_IMethod{

?

String?picPath?=?null;

String?result?=?null;

private?HWCloudManager?hwCloudManagerBcard;

?

public?M1294_hwymp_Model()?throws?Exception {

super();

}

?

/**

* 同步方法,JS腳本調(diào)用該組件對象方法時會被調(diào)用,可以根據(jù)_methodName調(diào)用相應的接口實現(xiàn)方法;

*?@_methodName?方法名稱

*?@_dictParas?參數(shù)(K,V),獲取參數(shù)值使用API提供DoJsonHelper類;

*?@_scriptEngine?當前Page JS上下文環(huán)境對象

*?@_invokeResult?用于返回方法結(jié)果對象

*/

@Override

public?boolean?invokeSyncMethod(String _methodName, JSONObject _dictParas,

DoIScriptEngine _scriptEngine, DoInvokeResult _invokeResult)

throws?Exception {

//...do something

return?super.invokeSyncMethod(_methodName, _dictParas, _scriptEngine, _invokeResult);

}

?

/**

* 異步方法(通常都處理些耗時操作,避免UI線程阻塞),JS腳本調(diào)用該組件對象方法時會被調(diào)用,

* 可以根據(jù)_methodName調(diào)用相應的接口實現(xiàn)方法;

*?@_methodName?方法名稱

*?@_dictParas?參數(shù)(K,V),獲取參數(shù)值使用API提供DoJsonHelper類;

*?@_scriptEngine?當前page JS上下文環(huán)境

*?@_callbackFuncName?回調(diào)函數(shù)名

* #如何執(zhí)行異步方法回調(diào)?可以通過如下方法:

* _scriptEngine.callback(_callbackFuncName, _invokeResult);

* 參數(shù)解釋:@_callbackFuncName回調(diào)函數(shù)名,@_invokeResult傳遞回調(diào)函數(shù)參數(shù)對象;

* 獲取DoInvokeResult對象方式new DoInvokeResult(this.getUniqueKey());

*/

@Override

public?boolean?invokeAsyncMethod(String _methodName, JSONObject _dictParas,

DoIScriptEngine _scriptEngine, String _callbackFuncName)throws?Exception {

if("getInfo".equals(_methodName))

{

getInfo(_dictParas, _scriptEngine, _callbackFuncName);

}

return?super.invokeAsyncMethod(_methodName, _dictParas, _scriptEngine, _callbackFuncName);

}

?

?

/**

* 獲取名片信息;

*?@_dictParas?參數(shù)(K,V),可以通過此對象提供相關(guān)方法來獲取參數(shù)值(Key:為參數(shù)名稱);

*?@_scriptEngine?當前Page JS上下文環(huán)境對象

*?@_callbackFuncName?回調(diào)函數(shù)名

*/

@Override

public?void?getInfo(JSONObject _dictParas, DoIScriptEngine _scriptEngine,String _callbackFuncName) {

ApplicationInfo info =?null;

try?{

info = DoServiceContainer.getPageViewFactory().getAppContext().getPackageManager().getApplicationInfo(DoServiceContainer.getPageViewFactory().getAppContext().getPackageName(), PackageManager.GET_META_DATA);

//添加判斷

String androidKey = info.metaData.getString("hwymp_android");

hwCloudManagerBcard?=?new?HWCloudManager(DoServiceContainer.getPageViewFactory().getAppContext(), androidKey);

picPath?= DoJsonHelper.getString(_dictParas,?"imgUrl",?"");

if(DoIOHelper.existFile(DoIOHelper.getLocalFileFullPath(_scriptEngine.getCurrentApp(),?picPath)))

{

picPath?= DoIOHelper.getLocalFileFullPath(_scriptEngine.getCurrentApp(),?picPath);

}

}?catch?(Exception e) {

e.printStackTrace();

}

ConnectionDetector connectionDetector =?new?ConnectionDetector(DoServiceContainer.getPageViewFactory().getAppContext());

if?(connectionDetector.isConnectingTOInternet()) {

if?(null?!=?picPath) {

result?=?hwCloudManagerBcard.cardLanguage("chns",?picPath);

DoInvokeResult invokeResult =?new?DoInvokeResult(getUniqueKey());

invokeResult.setResultText(result);

_scriptEngine.callback(_callbackFuncName, invokeResult);

}?else?{

new?Exception("請傳入圖片后再試");

}

}?else?{

new?Exception("網(wǎng)絡(luò)連接失敗,請檢查網(wǎng)絡(luò)后重試!");

}

}

?

}

上面這段代碼是我精簡之后的,看起來是不是簡介了很多,我現(xiàn)在講解一下如何精簡的,

public?class?DiscernThread?implements?Runnable{

?? ?

? ? @Override

? ??public?void?run() {

? ? ? ??try?{

? ? ? ? ? ??/**

?? ? ? ? ? ? *?調(diào)用漢王云名片識別方法

?? ? ? ? ? ? */

? ? ? ? ? ? result = hwCloudManagerBcard.cardLanguage("chns", picPath);

? ? ? ? ? ??// result = hwCloudManagerBcard.cardLanguage4Https("chns", picPath);

? ? ? ? }?catch?(Exception e) {

? ? ? ? ? ??// TODO: handle exception

? ? ? ? }

? ? ? ? Bundle mBundle =?new?Bundle();

? ? ? ? mBundle.putString("responce", result);

? ? ? ? Message msg =?new?Message();

? ? ? ? msg.setData(mBundle);

? ? ? ? discernHandler.sendMessage(msg);

? ? }

}

?

public?class?DiscernHandler?extends?Handler {

? ? @Override

? ??public?void?handleMessage(Message msg) {

? ? ? ??super.handleMessage(msg);

? ? ? ? pd.dismiss();

? ? ? ? Bundle bundle = msg.getData();

? ? ? ? String responce = bundle.getString("responce");

? ? ? ? testView.setText(responce);

? ? }

}

這兩段代碼完全是沒有用的,因為我們是異步方法,已經(jīng)在一個線程里面了,不需要再去new一個線程,還要像主線程發(fā)消息,好復雜,而且容易出錯

沒有用,去掉就可以了。然后就有上面的簡介代碼了。

info = DoServiceContainer.getPageViewFactory().getAppContext().getPackageManager().getApplicationInfo(DoServiceContainer.getPageViewFactory().getAppContext().getPackageName(), PackageManager.GET_META_DATA);

//添加判斷

String androidKey = info.metaData.getString("hwymp_android");

這段代碼就是我在manifest里面定義了一個,這樣方便我在發(fā)布到商店的時候,可以讓其他開發(fā)者去使用自己的key

?

<meta-data?android:name="hwymp_android"?android:value="your ?android key"></meta-data>

這樣,我們的組件算是寫好了,下面的工作就是我們要去dotest里面來測試一下我們的組件是否正確運行了,go

我們首先找到dotest/module/activity/webviewsampletestactivity.java文件,直接看代碼吧。

public?class?WebViewSampleTestActivty?extends?DoTestActivity{

?

@Override

protected?void?onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

?

@Override

protected?void?initModuleModel()?throws?Exception {

this.model?=?new?M1294_hwymp_Model();

}

?

@Override

protected?void?initUIView()?throws?Exception {

// Do_WebView_View view = new Do_WebView_View(this);

//? ? ? ? ((DoUIModule)this.model).setCurrentUIModuleView(view);

//? ? ? ? ((DoUIModule)this.model).setCurrentPage(currentPage);

//? ? ? ? view.loadView((DoUIModule)this.model);

//? ? ? ? LinearLayout?uiview?= (LinearLayout)findViewById(R.id.uiview);

//? ? ? ? uiview.addView(view);

}

?

@Override

public?void?doTestProperties(View view) {

DoService.setPropertyValue(this.model,?"url",?"https://www.baidu.com");

}

?

@Override

protected?void?doTestSyncMethod() {

Map<String, String> _paras_back =?new?HashMap<String, String>();

? ? ? ? DoService.syncMethod(this.model,?"back", _paras_back);

}

?

@Override

protected?void?doTestAsyncMethod() {

Map<String, String>? _paras_loadString =?new?HashMap<String, String>();

? ? ? ? _paras_loadString.put("imgUrl",?"/storage/emulated/0/tencent/MicroMsg/WeiXin/mmexport1473648247058.jpg.do");

? ? ? ? DoService.asyncMethod(this.model,?"getInfo", _paras_loadString,?new?DoService.EventCallBack() {

@Override

public?void?eventCallBack(String _data) {//回調(diào)函數(shù)

DoServiceContainer.getLogEngine().writeDebug("異步方法回調(diào):"?+ _data);

}

});

}

?

@Override

protected?void?onEvent() {

DoService.subscribeEvent(this.model,?"loaded",?new?DoService.EventCallBack() {

@Override

public?void?eventCallBack(String _data) {

DoServiceContainer.getLogEngine().writeDebug("事件回調(diào):"?+ _data);

}

});

}

?

@Override

public?void?doTestFireEvent(View view) {

DoInvokeResult invokeResult =?new?DoInvokeResult(this.model.getUniqueKey());

this.model.getEventCenter().fireEvent("_messageName", invokeResult);

}

?

?

}

看下上面標紅的部分,因為我這個組件是sm的組件,所以跟UI相關(guān)的我需要,所以注釋掉,然后找到方法的地方,將我東西初始化并調(diào)用方法。

這樣直接在android上面運行這個項目就可以了。

至此,我的android項目編寫完成。

?

IOS:

看下項目的目錄

點擊doExtLib右鍵,添加新文件,導入之后的圖片

然后我們點擊“組件_sm.m”文件看下代碼。

@implementation?M1294_hwymp_SM

#pragma mark -?方法

#pragma mark -?同步異步方法的實現(xiàn)

//同步

//異步

- (void)getInfo:(NSArray?*)parms

{

? ??//異步耗時操作,但是不需要啟動線程,框架會自動加載一個后臺線程處理這個函數(shù)

? ??NSDictionary?*_dictParas = [parms?objectAtIndex:0];

? ??//參數(shù)字典_dictParas

? ??id<doIScriptEngine> _scritEngine = [parms?objectAtIndex:1];

? ??//自己的代碼實現(xiàn)

?? ?

? ??NSString?*_callbackName = [parms?objectAtIndex:2];

? ??//回調(diào)函數(shù)名_callbackName

? ??doInvokeResult?*_invokeResult = [[doInvokeResult?alloc]?init];

? ??//_invokeResult設(shè)置返回值

?? ?

? ? [_scritEngine?Callback:_callbackName :_invokeResult];

}

?

?

@end

代碼非常簡單,我們直觀的看到了我們創(chuàng)建好的組件,我們來看下里面的中文解釋也是非常的清晰,下面我們直接貼代碼。

導入.a文件的步驟省略(百度)

@implementation?M1294_hwymp_SM

#pragma mark -?方法

#pragma mark -?同步異步方法的實現(xiàn)

//同步

//異步

- (void)getInfo:(NSArray?*)parms

{

? ??//異步耗時操作,但是不需要啟動線程,框架會自動加載一個后臺線程處理這個函數(shù)

? ??NSDictionary?*_dictParas = [parms?objectAtIndex:0];

? ??//參數(shù)字典_dictParas

? ??id<doIScriptEngine> _scritEngine = [parms?objectAtIndex:1];

? ??//自己的代碼實現(xiàn)

?? ?

? ??NSString?*_callbackName = [parms?objectAtIndex:2];

? ??//回調(diào)函數(shù)名_callbackName

? ??doInvokeResult?*_invokeResult = [[doInvokeResult?alloc]?init];

? ??//_invokeResult設(shè)置返回值

?? ?

?? ?

? ??HWCloudsdk *sdk = [[HWCloudsdk alloc]init];

? ? UIImage *cardImg = [UIImage imageNamed:@"cardimage.jpg"];

?? ?

? ??//apiKey?需要您到developer.hanvon.com?自行申請

? ??NSString?*apiKey =?@"your - ios - key";

?? ?

? ? [sdk cardLanguage:@"auto"?cardImage:cardImg apiKey:apiKey successBlock:^(id?responseObject) {

? ? ? ? NSLog(@"%@",responseObject);

? ? } failureBlock:^(NSError *error) {

? ? ? ? NSLog(@"%@",error);

? ? }];

?

?? ?

?? ?

? ? [_scritEngine?Callback:_callbackName :_invokeResult];

}

?

?

@end

紅色為示例demo下面的代碼,直接貼過來,我們在看下。

看過之后,好像離我們要的組件編碼已經(jīng)很接近了。修改代碼如下。

@implementation?M1294_hwymp_SM

#pragma mark -?方法

#pragma mark -?同步異步方法的實現(xiàn)

//同步

//異步

- (void)getInfo:(NSArray?*)parms

{

? ??//異步耗時操作,但是不需要啟動線程,框架會自動加載一個后臺線程處理這個函數(shù)

? ??NSDictionary?*_dictParas = [parms?objectAtIndex:0];

? ??//參數(shù)字典_dictParas

? ??id<doIScriptEngine> _scritEngine = [parms?objectAtIndex:1];

? ??NSString?*_callbackName = [parms?objectAtIndex:2];

? ??//獲取圖片地址

? ??NSString?*url = [doJsonHelper?GetOneText:_dictParas :@"imgUrl"?:@""?];

? ??UIImage?*cardImg = [UIImage?imageWithContentsOfFile: [doIOHelper?GetLocalFileFullPath:[_scritEngine?CurrentApp] :url]];

? ??//初始化HWCloud

? ??HWCloudsdk?*sdk = [[HWCloudsdk?alloc]init];

? ??//apiKey?需要您到developer.hanvon.com?自行申請

? ??NSString?*apiKey = [[doServiceContainer?Instance].ModuleExtManage?GetThirdAppKey:@"hwymp.plist"?:@"hwymp_ios"?];

? ? [sdk?cardLanguage:@"chns"?cardImage:cardImg?apiKey:apiKey?successBlock:^(id?responseObject) {

? ? ? ??doInvokeResult?*_invokeResult = [[doInvokeResult?alloc]?init];

? ? ? ? [_invokeResult?SetResultText:responseObject];

? ? ? ? [_scritEngine?Callback:_callbackName :_invokeResult];

? ? }?failureBlock:^(NSError?*error) {

? ? ? ??NSLog(@"%@",error);

? ? }];

?

}

上面藍色部分為我修改過的代碼。我在項目中自己定義了一個plist文件,用于去key值,方便以后提交到上面,開發(fā)者可以填寫自己的key

這樣我編碼就完成了,接下來測試。我們打開do_test文件夾下面的viewcontroller。直接看源碼。

#import?"ViewController.h"

#import?"doPage.h"

#import?"doService.h"

#import?"doModuleFactory.h"

?

#import?"M1294_hwymp_SM.h"

@interface?ViewController?()

{

@private

? ??NSString?*Type;

? ??doModule* model;

}

@end

@implementation?CallBackEvnet

?

-(void)eventCallBack:(NSString?*)_data

{

? ??NSLog(@"異步方法回調(diào)數(shù)據(jù):%@",_data);

}

?

@end

@implementation?ViewController

?

- (void)viewDidLoad {

? ? [super?viewDidLoad];

? ? [self?InitInstance];

? ? [self?ConfigUI];

? ??// Do any additional setup after loading the view, typically from a nib.

}

- (void) InitInstance

{

? ??NSString?*testPath = [[NSBundle?mainBundle]?pathForResource:@"do_Test"?ofType:@"json"];

? ??NSData?*data = [NSData?dataWithContentsOfFile:testPath];

? ??NSMutableDictionary?*_testDics = [NSJSONSerialization?JSONObjectWithData:data?options:NSJSONReadingMutableContainers?error:nil];

? ??Type?= [_testDics?valueForKey:@"Type"];

? ??//在下面構(gòu)造model

? ??model?= [[M1294_hwymp_SM?alloc]init];

?? ?

? ? [doServiceContainer?Instance].SingletonModuleFactory?=? [[doModuleFactory?alloc]init:model];

?? ?

? ??//如果是UI類型,還需要構(gòu)造view

? ??//UIView* view = [[xxxxView alloc]init];

?? ?

}

- (void)ConfigUI {

? ??CGFloat?w =?self.view.frame.size.width;

? ??CGFloat?h =?self.view.frame.size.height;

? ??//在對應的測試按鈕添加自己的測試代碼,?如果6個測試按鈕不夠,可以自己添加

?? ?

? ??if([Type?isEqualToString:@"UI"]){

? ? ? ??//SMMM不一樣,UI類型還得添加自己的View,所以測試按鈕都在底部

? ? ? ??CGFloat?height = h/6;

? ? ? ??CGFloat?width = (w -?35)/6;

? ? ? ??for(int?i =?0;i<6;i++){

? ? ? ? ? ??UIButton?*test = [UIButton?buttonWithType:UIButtonTypeCustom];

? ? ? ? ? ? test.frame?=?CGRectMake(5*(i+1)+width*i, h-h/6, width, height);

? ? ? ? ? ??NSString* title = [NSString?stringWithFormat:@"Test%d",i ];

? ? ? ? ? ? [test?setTitle:title?forState:UIControlStateNormal];

? ? ? ? ? ??SEL?customSelector =?NSSelectorFromString([NSString?stringWithFormat:@"test%d:",i]);

? ? ? ? ? ? [test?addTarget:self?action:customSelector?forControlEvents:UIControlEventTouchUpInside];

? ? ? ? ? ? [self.view?addSubview:test];

? ? ? ? }

? ? ? ??//addsubview?自定義的UI

?? ? ? ?

? ? }else{

? ? ? ??CGFloat?height = (h-140)/6;

? ? ? ??CGFloat?width = w -?60;

? ? ? ??for(int?i =?0;i<6;i++){

? ? ? ? ? ??UIButton?*test = [UIButton?buttonWithType:UIButtonTypeCustom];

? ? ? ? ? ? test.frame?=?CGRectMake(30,?20*(i+1)+height*i, width, height);

? ? ? ? ? ??NSString* title = [NSString?stringWithFormat:@"Test%d",i ];

? ? ? ? ? ? [test?setTitle:title?forState:UIControlStateNormal];

? ? ? ? ? ??SEL?customSelector =?NSSelectorFromString([NSString?stringWithFormat:@"test%d:",i]);

? ? ? ? ? ? [test?addTarget:self?action:customSelector?forControlEvents:UIControlEventTouchUpInside];

? ? ? ? ? ? [self.view?addSubview:test];

? ? ? ? }

? ? }

}

?

- (void)test0:(UIButton?*)sender

{

? ??NSLog(@"請?zhí)砑幼约旱臏y試代碼");

}

- (void)test1:(UIButton?*)sender

{

? ??NSLog(@"請?zhí)砑幼约旱臏y試代碼");

? ??//執(zhí)行同步方法

? ??//NSMutableDictionary* node = [[NSMutableDictionary alloc]init];

? ??//[node setObject:參數(shù)值?forKey:參數(shù)名];

? ??//[[doService Instance] SyncMethod:model :同步方法名?:node];

?? ?

}

- (void)test2:(UIButton?*)sender

{

? ??NSLog(@"請?zhí)砑幼约旱臏y試代碼");

? ??//執(zhí)行異步方法

? ??NSMutableDictionary* node = [[NSMutableDictionary?alloc]init];

? ? [node?setObject:@"/var/mobile/Containers/Data/Application/8F26712D-29F1-46F8-93FD-144D606E0342/Library/deviceone/data/1ea276f4-2fb8-4c03-8c0c-2c43f14c0b5d/temp/do_Album/BF74D875-7B19-44F5-9D88-40F3254BA5D4.jpg"?forKey:@"imgUrl"];

? ??CallBackEvnet* event = [[CallBackEvnet?alloc]init];//回調(diào)類

? ? [[doService?Instance]?AsyncMethod:model?:@"getInfo"?:node:event];

?

}

- (void)test3:(UIButton?*)sender

{

? ??NSLog(@"請?zhí)砑幼约旱臏y試代碼");

}

- (void)test4:(UIButton?*)sender

{

? ??NSLog(@"請?zhí)砑幼约旱臏y試代碼");

}

- (void)test5:(UIButton?*)sender

{

? ??NSLog(@"請?zhí)砑幼约旱臏y試代碼");

}

- (void)didReceiveMemoryWarning {

? ? [super?didReceiveMemoryWarning];

? ??// Dispose of any resources that can be recreated.

?

}

上面藍色部分為我添加的代碼,直接在手機上面真是運行就可以了。

上面就是編碼完成了。

?

7.上傳zip包

經(jīng)過步驟6的工作,我們下一步就是上傳zip包到deviceone開發(fā)者后臺的組件開發(fā)里面。

下面還是通過兩個平臺來講解。

android:

我們看到在組件項目中有一個do_build.xml文件,打開,然后修改sdk版本路徑。

然后點擊右鍵的ant ?build。就可以打包出來上傳的zip包。

?ios:

直接上圖

?

通過這個編譯之后,會有一個.a文件生成,然后將這個。a文件拷貝到一個文件夾下面

然后在拷貝下圖文件

整理好的文件如下列表

hwymp.a

hwymp.plist

M1294_hwymp_App.h

M1294_hwymp_SM.h

四個文件。將這四個文件壓縮成一個zip就可以了。

我們上傳到android和ios各自平臺上即可。

?

8.編寫示例進行調(diào)試

打開deviceone的eclipse的開發(fā)工具。

創(chuàng)建一個項目。(這個略過)

然后去后臺配置這個項目(略過)

然后配置組件,選擇自己開發(fā)的內(nèi)部組件,選擇。(省略)

然后回到eclipse開發(fā)工具,同步組件(省略)

接下來開發(fā)

?

接下來看js的代碼。

var?nf = sm("do_Notification");

var?album = sm("do_Album");

?

var?hw = sm("M1294_hwymp");

?

var?page = sm("do_Page");

var?app = sm("do_App");

?

var?file = sm("do_Storage");

?

page.on("back",?function(data) {

app.closePage();

})

?

?

var?select = ui("select");

select.on("touch",?function() {

album.select(1, -1, -1, 100,?false,?function(data, e) {

select.source = data[0];

})

});

?

var?btn = ui("btn");

?

btn.on("touch",?function() {

hw.getInfo(select.source +?"",?function(data, e) {

nf.alert(JSON.stringify(data));

})

?

});

整個的思路就是,

我用一個imageview來看我選擇的圖片

我用一個album來選擇圖片并返回路徑

我用一個button來控制識別

?

這樣我的demo就完成了

?

9.完成。

?

下載安裝調(diào)試版本的安裝包。(省略)

點擊更新。

調(diào)試出結(jié)果。OK

?

感謝大家。謝謝。

?

?

?

?

?

?

?

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/onlydo/p/5870926.html

總結(jié)

以上是生活随笔為你收集整理的汉王云名片识别(SM)组件开发详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

新av在线| 国产午夜精品久久 | 亚洲永久国产精品 | 五月天婷亚洲天综合网精品偷 | 奇米影视777四色米奇影院 | 久久久精品欧美一区二区免费 | 亚洲爱视频 | 日本久草电影 | 日韩在线观看影院 | 久久精品91视频 | 免费在线激情电影 | 不卡av免费在线观看 | 欧美国产日韩一区二区 | 国产精品久久一卡二卡 | 国产午夜一级毛片 | 成人在线一区二区 | 在线观看91精品国产网站 | 天天插日日插 | 久久无码av一区二区三区电影网 | 在线观看av小说 | 国产手机精品视频 | 亚洲国产高清在线 | 丁香五香天综合情 | 国产精品一区二区三区四 | 亚洲网站在线看 | 天天摸天天舔 | 菠萝菠萝在线精品视频 | 国产黄色在线 | 伊人色综合网 | 一区二区三区高清在线 | 久人人 | 色av男人的天堂免费在线 | 91九色在线视频观看 | 天天爱综合 | 国产在线观看午夜 | 精品国内自产拍在线观看视频 | 午夜精品一区二区三区在线 | 天天操人人要 | 99 国产精品| 国产精品毛片一区二区 | 黄在线免费看 | 免费亚洲婷婷 | 亚洲精品久久久久久久蜜桃 | 精品你懂的 | 免费看成人av | 日本性久久 | 深爱综合网 | 中文字幕一区在线 | 一区二区精品视频 | 欧美在线视频一区二区 | 黄色成人影院 | 激情综合亚洲 | 亚洲国产欧美在线看片xxoo | 色成人亚洲 | 中文字幕在线色 | 国产日韩中文字幕在线 | 免费高清男女打扑克视频 | 波多野结衣亚洲一区二区 | 深爱五月网 | 中文在线a在线 | 亚洲在线日韩 | 91精彩视频在线观看 | 亚洲在线资源 | 绯色av一区 | 黄色av电影 | 欧美日韩视频在线 | 国产婷婷视频在线 | 欧美一级专区免费大片 | 99中文字幕 | 99久久激情| 欧美专区国产专区 | 国产精品九九视频 | 免费观看黄色12片一级视频 | 91视频午夜 | 草久热 | 免费福利在线视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 最近日本中文字幕 | 日韩国产精品久久 | 97国产超碰 | 91视频在线自拍 | 国产91学生粉嫩喷水 | 在线影院中文字幕 | 国产精品久久艹 | 欧美日本不卡高清 | 激情综合网在线观看 | 亚洲四虎| 国产一区二区三区视频在线 | 久草视频中文在线 | 四虎5151久久欧美毛片 | 亚洲九九| 国内精品视频在线播放 | 在线亚洲日本 | 久久精品成人 | 国产精品久久久久久妇 | 免费日韩电影 | 色综合五月天 | 亚洲免费观看视频 | 丁香资源影视免费观看 | 亚洲久草网| 天堂黄色片 | 久久黄色免费视频 | 国产精品999久久久 久产久精国产品 | 欧美日韩免费观看一区=区三区 | 99热日本 | 亚洲精品国偷拍自产在线观看 | 国产精品专区一 | 久久人人爽人人人人片 | 在线观看黄色 | 国产成人精品在线观看 | 中日韩欧美精彩视频 | 久久久久久久av麻豆果冻 | 亚洲国产精品一区二区久久,亚洲午夜 | av韩国在线| 久久99久久99 | 日韩一二三在线 | 亚洲 欧洲av | 成 人 黄 色 视频播放1 | av资源免费观看 | 91爱爱网址 | 国产精品一区免费观看 | 四虎影视欧美 | 中日韩欧美精彩视频 | 狠狠狠狠狠狠操 | 亚洲在线精品视频 | 99热在线免费观看 | 国产一区av在线 | 国产九九九精品视频 | 在线精品亚洲一区二区 | 毛片久久久| 国产在线观看,日本 | 在线成人免费电影 | 精品国产免费人成在线观看 | 久久污视频 | 天天干夜夜 | 在线中文字母电影观看 | 亚洲免费专区 | 国产女做a爱免费视频 | 国产精品福利一区 | 超碰在线亚洲 | 美女很黄免费网站 | 最近中文字幕高清字幕在线视频 | 日韩av中文在线观看 | 激情五月五月婷婷 | 全久久久久久久久久久电影 | 久久精品激情 | 97超级碰碰碰碰久久久久 | 一色屋精品视频在线观看 | av在线官网 | 蜜臀91丨九色丨蝌蚪老版 | 国产美女视频 | 在线a亚洲视频播放在线观看 | 奇米影视8888在线观看大全免费 | 18av在线视频| 亚洲精品久久在线 | 国产精品九九九 | 国产欧美精品一区二区三区四区 | 国产看片免费 | 亚洲精品一区二区久 | 2019久久精品 | 国产美女视频网站 | 天堂在线一区 | 中文字幕高清免费日韩视频在线 | 五月激情姐姐 | 亚洲精品1234区 | 黄色在线看网站 | 奇米四色影狠狠爱7777 | 亚洲狠狠婷婷综合久久久 | 最近字幕在线观看第一季 | 久热免费在线观看 | 免费在线精品视频 | 狠狠狠色 | 伊人超碰在线 | 黄色免费网站 | 在线观看网站黄 | 黄色aaa级片| 成人国产精品一区二区 | 色综合久久88色综合天天人守婷 | 国产福利不卡视频 | 热re99久久精品国产66热 | 高清av中文在线字幕观看1 | 夜夜澡人模人人添人人看 | 亚洲国产一区二区精品专区 | 五月激情亚洲 | 超碰精品在线 | 国产精品 9999 | 亚洲精品视频第一页 | av在线专区| 日韩精品91偷拍在线观看 | 国产在线看 | 伊人天天| 中文字幕一区2区3区 | 国产精品精品久久久久久 | 伊人永久在线 | 人人草在线视频 | 91免费观看国产 | 久久黄色网页 | 一区二区三区福利 | 日韩精品一区在线播放 | 欧美视频日韩视频 | 成人免费在线观看电影 | 免费看色视频 | 四虎在线视频免费观看 | 日韩无在线 | 免费视频区 | 成年人视频免费在线播放 | 天天天色综合 | 一区二区三区在线电影 | 国产最新视频在线 | 国产精品一区二区三区99 | 国产伦精品一区二区三区免费 | 综合伊人久久 | 色五月色开心色婷婷色丁香 | 99热播精品| 精品一区二区三区在线播放 | 天天天色综合 | 亚洲精品动漫成人3d无尽在线 | 久久亚洲私人国产精品va | 91污污 | 国产精品手机播放 | 国产在线超碰 | 干狠狠 | 精品日韩中文字幕 | 天天草天天干天天射 | 开心丁香婷婷深爱五月 | 色吧av色av| 精品成人a区在线观看 | 色综合久久久久久中文网 | 在线日韩av | 一级成人网 | 久久不卡日韩美女 | 日韩精品亚洲专区在线观看 | 久久精品视频国产 | 在线观看你懂的网站 | 97电影在线| 久久精品免费 | 久久a v电影| 青青河边草免费观看 | 天天综合久久 | 永久免费观看视频 | 欧美日韩一区二区在线观看 | 在线免费日韩 | 97人人添人澡人人爽超碰动图 | 手机在线视频福利 | 国产高清一区二区 | 久久再线视频 | www.大网伊人 | 亚洲婷婷伊人 | 亚洲国产精品人久久电影 | 成人午夜久久 | 久久经典国产 | 亚洲九九九在线观看 | 午夜精品一区二区三区在线 | 国产精品久久久久国产精品日日 | 一级精品视频在线观看宜春院 | 97超碰总站| 国产精品一二三 | 中文字幕乱码一区二区 | 精品国模一区二区三区 | 成年人免费电影在线观看 | 麻豆一精品传二传媒短视频 | wwwwwww黄| 成人性生交大片免费看中文网站 | 九九免费在线视频 | 综合色综合 | 国产精品久久久久四虎 | www.黄色片网站 | 免费男女羞羞的视频网站中文字幕 | 久久高清国产视频 | www99精品| 免费在线观看黄网站 | 欧美国产不卡 | 久久999久久 | 91精品入口 | 99视频国产精品免费观看 | 精品999国产| 国产精品久久久久久久久大全 | 国产亚洲高清视频 | 中文在线a在线 | 欧美精品三级在线观看 | 伊人久久国产 | 91污污视频在线观看 | 色婷婷 亚洲 | 国产精品日韩欧美 | 九九热在线视频免费观看 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 成人黄性视频 | 天天综合网在线观看 | 亚洲精品视频在 | 一级片黄色片网站 | 久久与婷婷| 99久久精品国产系列 | 91精彩视频在线观看 | 亚洲一区二区三区在线看 | 久久久综合九色合综国产精品 | 国内精品久久久久久中文字幕 | 一级淫片a | 成人黄色av网站 | 国产精品精品国产色婷婷 | 国产亚洲视频中文字幕视频 | 92中文资源在线 | 黄色三级网站在线观看 | 亚洲成人精品 | 久久歪歪| 色视频在线观看免费 | 国产特级毛片aaaaaa | 国内精品视频久久 | 精品自拍网 | 欧美一区二区伦理片 | 人人看黄色 | 国产拍揄自揄精品视频麻豆 | 最近日韩免费视频 | www国产亚洲精品 | 久久久久女人精品毛片九一 | www.在线看片.com | 亚洲精品乱码久久久久久9色 | 久久成人一区二区 | 香蕉视频啪啪 | 精品久久久久久久久亚洲 | 国产日本在线观看 | 久久视频免费在线观看 | 正在播放国产一区 | 深夜精品福利 | 国产这里只有精品 | 国产不卡在线视频 | 免费av高清 | 欧美日韩精品在线观看视频 | 99久久精品午夜一区二区小说 | 久久九九影视 | 99九九免费视频 | 高清视频一区 | 97视频人人免费看 | 国产又黄又爽又猛视频日本 | 日韩欧美视频一区二区三区 | 天天操夜夜摸 | 久99热| 亚洲精品裸体 | 亚洲永久字幕 | 99性视频| 国产91精品欧美 | 成人一区影院 | 久草视频99| 91香蕉视频在线下载 | 婷婷久操| 国产粉嫩在线观看 | 97av精品 | 欧美少妇18p | 51久久夜色精品国产麻豆 | 欧美精品久久久久久久久久白贞 | 午夜免费电影院 | 99在线播放| 久久综合九色综合97_ 久久久 | 欧美午夜精品久久久久 | 欧美91精品久久久久国产性生爱 | 亚洲日本欧美在线 | 草莓视频在线观看免费观看 | 免费久久99精品国产 | 最新色站 | 天天要夜夜操 | 黄色av电影免费观看 | 午夜视频在线观看一区二区三区 | 亚洲一级电影视频 | 午夜精品久久久久久99热明星 | 超碰免费av | 亚洲精品乱码久久久久久久久久 | 欧美国产精品一区二区 | 久久成年人网站 | 天天干天天草天天爽 | 久久欧美综合 | 日本乱视频 | 99免费在线观看视频 | 99热手机在线观看 | 天天综合视频在线观看 | 亚洲成av片人久久久 | 色99久久| 国产黄色在线看 | 亚洲欧美成人网 | 麻花豆传媒一二三产区 | 国产一级精品在线观看 | 91av中文字幕 | sm免费xx网站 | 在线中文字幕一区二区 | 久久人91精品久久久久久不卡 | 国产不卡精品视频 | 国产精品久久一区二区三区不卡 | 婷婷五天天在线视频 | 操操操影院 | 97在线看| av在线色 | 涩涩网站在线观看 | 欧美一级黄色视屏 | 日韩 国产 | 色婷婷导航 | 色久网| 午夜精品婷婷 | 久久色在线观看 | 中文字幕在线观看播放 | 欧美激情视频一区二区三区免费 | 超薄丝袜一二三区 | 婷婷色社区 | 91在线中文 | 久草在线综合网 | 综合网伊人 | 国产亚洲精品久久久久久久久久 | 九九视频精品在线 | 99色| 国产不卡视频在线播放 | 日韩精品免费在线视频 | 在线午夜电影神马影院 | 国产日韩欧美在线观看视频 | 欧洲精品在线视频 | 97精品一区| 婷婷去俺也去六月色 | 免费看成人a | 一区免费在线 | 美女精品久久久 | 欧美激情操 | 亚洲电影影音先锋 | 国产午夜精品久久久久久久久久 | 亚洲精品麻豆 | 免费在线观看不卡av | 国产黑丝袜在线 | 天天曰天天爽 | 中文字幕免费播放 | 91粉色视频 | 免费在线国产精品 | 欧美成人区 | 美女一二三区 | 韩日视频在线 | 亚洲成人软件 | 狠狠色丁香久久婷婷综合五月 | av经典在线| 亚洲久草在线视频 | 九九视频精品免费 | 2021国产在线视频 | 天天插一插 | 99在线观看 | 亚洲综合色丁香婷婷六月图片 | 亚洲国产日韩欧美 | 五月婷婷激情五月 | 精品一区二区视频 | 色夜影院| 国产亚洲视频中文字幕视频 | 丁香av在线 | 996久久国产精品线观看 | 色综合久久久久综合99 | 视频福利在线观看 | 色偷偷网站视频 | 在线97| 国产精品 中文字幕 亚洲 欧美 | 久久久久久久久久久高潮一区二区 | 三级av免费| 亚洲欧美在线观看视频 | 97看片吧| 成人精品福利 | 国产精品久久久久久久久久久久 | 成人超碰在线 | 国产系列在线观看 | 国产精品99久久久久久人免费 | 成年人视频免费在线 | 久久午夜精品影院一区 | 色婷婷激情四射 | 精品中文字幕在线 | 久久久久久中文字幕 | www欧美色| 国产a级免费 | 午夜91在线| 91在线免费观看网站 | 亚洲激情一区二区三区 | 蜜桃视频在线视频 | 免费日韩 精品中文字幕视频在线 | 激情综合网在线观看 | 99热精品国产 | 国产最新视频在线 | 亚洲欧美在线视频免费 | 成人免费xxxxxx视频 | 91日韩在线专区 | 成人av电影在线观看 | 欧美久久久久久久久久久 | 一区二区理论片 | 狠狠躁日日躁夜夜躁av | 久久国产麻豆 | 日韩在线免费视频 | 日韩乱码在线 | 亚州天堂| 亚洲爱爱视频 | 99视频国产在线 | 中文字幕有码在线播放 | 久av电影| 国产精品不卡视频 | 精品国模一区二区 | 国产精品免费观看在线 | a天堂最新版中文在线地址 久久99久久精品国产 | 在线视频一区观看 | 91中文字幕在线 | 国产精品美女久久久网av | 免费精品国产 | 久久99视频| 国产手机在线观看视频 | 久草在线看片 | 天躁狠狠躁 | 久久久电影网站 | 9999精品免费视频 | a视频在线观看 | 久久av网| av在线播放网址 | 国际精品久久 | av黄色免费看 | 免费日韩电影 | 成人av网页| 日本最新高清不卡中文字幕 | 日韩在线第一 | 黄色片视频免费 | 午夜在线观看一区 | 日本三级香港三级人妇99 | 丁香网五月天 | 九九国产精品视频 | 免费在线观看av电影 | 亚洲成年人在线播放 | 免费高清在线观看成人 | 亚洲撸撸| 国产精品久久久久久妇 | 久久久久久久久久久网 | 亚洲综合丁香 | 久久av一区二区三区亚洲 | 国产操在线 | 超碰在线官网 | 成人免费中文字幕 | 久久免费视频一区 | 天天色天天骑天天射 | 亚洲激色 | 成人免费网站在线观看 | 美女视频黄免费的 | 欧美a级成人淫片免费看 | 久久精品国产成人精品 | 91大神精品视频在线观看 | 91久久精品一区二区二区 | 天天做天天干 | 亚洲精品小区久久久久久 | 久久免费视频这里只有精品 | 日日摸日日添夜夜爽97 | 午夜三级理论 | 国产一二区视频 | 成人久久精品视频 | 精品一区二区电影 | 国产91精品一区二区 | 日本一区二区三区视频在线播放 | 激情偷乱人伦小说视频在线观看 | 中文字幕在线视频一区二区 | 精品电影一区二区 | 国产一区二区不卡视频 | 天堂av一区二区 | 亚洲97在线| 91丨九色丨蝌蚪丨对白 | 激情五月五月婷婷 | 夜夜躁狠狠躁日日躁视频黑人 | 韩日三级在线 | 免费在线激情电影 | 日本精品视频在线观看 | 日韩高清不卡一区二区三区 | 国产美女精品人人做人人爽 | 人人干人人模 | 天天玩夜夜操 | zzijzzij亚洲成熟少妇 | 亚洲精品女人久久久 | 三级视频日韩 | 免费国产在线精品 | 在线电影a | 国产精品福利一区 | 亚洲成人家庭影院 | 2000xxx影视 | 香蕉久草 | 亚洲 中文 欧美 日韩vr 在线 | 99久久精品国产系列 | 亚洲区精品视频 | 一级免费片 | 麻豆精品视频在线观看免费 | 国产精品视频大全 | 国产色女人 | 欧美精品v国产精品v日韩精品 | 欧美精品v国产精品v日韩精品 | www.婷婷com | 精品一区二区三区电影 | 国产日韩精品在线 | 一级欧美日韩 | 天天爱天天射天天干天天 | 久久av电影 | 黄色av成人在线观看 | av夜夜操 | 96久久久| 一级做a爱片性色毛片www | av成人免费在线 | 国产在线一区二区 | 国产成人精品女人久久久 | 久草网站| 99久久99久久综合 | 日本亚洲国产 | 免费人成网ww44kk44 | 亚洲另类xxxx | 五月天综合网站 | 中文字幕日本在线 | 天堂入口网站 | 黄色一级在线免费观看 | 手机在线小视频 | 狠狠色丁香婷婷综合久小说久 | 国产精品免费在线播放 | 亚洲国产日韩在线 | 亚洲天堂色婷婷 | 99色人| 国产色网站 | 国产在线美女 | 中文字幕日韩免费视频 | 中文字幕在线观看网址 | 91手机电视 | 国产精品视频免费观看 | 色资源二区在线视频 | 五月天天av | 国产成人一区二区三区 | 国产视频1区2区3区 久久夜视频 | 日韩动态视频 | 高清精品久久 | 久久午夜网 | 久草在在线视频 | 99精品国产福利在线观看免费 | 国产激情小视频在线观看 | 亚洲一区二区天堂 | 欧美最猛性xxx | 岛国大片免费视频 | 久久精品www人人爽人人 | 中文字幕亚洲欧美日韩 | 五月丁色 | 在线国产不卡 | 久久经典视频 | 欧美性粗大hdvideo | 人人精品| 日韩免费电影一区二区三区 | 日韩欧美一二三 | 又黄又爽又刺激 | 综合黄色网 | 久久精品一区二区三区中文字幕 | 久久国内精品99久久6app | 国产伦精品一区二区三区… | 欧美人牲 | 91成人精品国产刺激国语对白 | 97夜夜澡人人双人人人喊 | 欧美日韩免费在线观看视频 | 亚洲一区 影院 | 韩国一区在线 | 亚洲毛片一区二区三区 | 亚洲午夜久久久久久久久久久 | 国产亚洲精品综合一区91 | 狠狠色婷婷丁香六月 | 亚洲有 在线 | 国产一级片一区二区三区 | 中文字幕在线网址 | 久草av在线播放 | 九色视频自拍 | 日韩一区二区三区在线观看 | 一级欧美日韩 | 国模吧一区 | 日韩av免费在线电影 | 国产精品99久久久久久大便 | 午夜体验区 | 日日草av | 欧美久久久一区二区三区 | 久久图 | 337p西西人体大胆瓣开下部 | 欧美精品色 | 久久国产网 | 成人免费在线网 | 久久精品日产第一区二区三区乱码 | 久久久精品免费看 | 黄色成人av | 深夜免费网站 | 99久久99| 一区 在线 影院 | 在线电影中文字幕 | 欧美极度另类 | 国产99久久久精品 | 视频在线观看一区 | 激情欧美一区二区免费视频 | 国产精品69av | 欧美乱码精品一区二区 | 中文字幕一二三区 | 91成人精品在线 | 色婷婷97| 91亚洲国产成人 | 免费亚洲视频 | 国产高清视频在线播放一区 | 色综合久久久久久中文网 | 天天干夜夜爱 | 色偷偷人人澡久久超碰69 | 国产精品久久久久久超碰 | 国产一二三四在线视频 | 91亚洲综合 | 天天天天爱天天躁 | 正在播放一区二区 | 最新黄色av网址 | 久久久午夜视频 | 最新日韩在线观看视频 | 黄a网站| 免费www视频 | 四虎影视4hu4虎成人 | 美女免费视频一区 | 精品视频999 | 国产精品久久久久毛片大屁完整版 | 国产在线观看免费av | 麻豆免费视频观看 | 国产日产欧美在线观看 | 免费麻豆网站 | 久久99精品国产麻豆婷婷 | 中文字幕一区二区三区视频 | 亚洲欧美日韩在线看 | 国产伦理精品一区二区 | 免费av大全 | 九九在线视频免费观看 | 国产美女无遮挡永久免费 | 色网站国产精品 | 中文字幕一区二区三区在线播放 | 亚洲视频 在线观看 | www.伊人网| 福利一区在线视频 | 国产精品久久久精品 | 狠狠的干 | 久久久亚洲精品 | 成人一级影视 | 午夜精品久久久久久久久久久久久久 | 亚洲va欧美 | 日韩理论片在线 | 超碰在线cao | 亚洲美女免费精品视频在线观看 | 中文字幕av在线免费 | 国产精品伦一区二区三区视频 | 91免费观看视频在线 | 久久国产影院 | 91精品久久久久久久99蜜桃 | 免费在线精品视频 | 激情动态 | 国产视频精品在线 | 久久av网址 | 日本一区二区免费在线观看 | 欧洲色吧| 日本黄色大片免费 | 在线观看久久 | 成人精品一区二区三区中文字幕 | 国产亚洲精品电影 | 99久热精品 | av福利在线免费观看 | 欧美精品一区二区免费 | 免费精品在线 | 国产黄色精品视频 | 亚洲国产精彩中文乱码av | 国产精品自拍在线 | 久草91视频| 日本韩国精品一区二区在线观看 | 欧美日产在线观看 | a天堂中文在线 | 深夜激情影院 | 久久网址 | 免费高清看电视网站 | 黄色免费电影网站 | 亚洲激情六月 | 精品国产乱码一区二区三区在线 | 国产人成精品一区二区三 | 久久久亚洲网站 | 国产美腿白丝袜足在线av | 色综合久久中文综合久久牛 | 国产视频一区二区三区在线 | 91精品综合在线观看 | 国产亚洲aⅴaaaaaa毛片 | 久久精品79国产精品 | 国产精品一区二区久久精品爱微奶 | 欧美a性| 婷婷色视频 | 欧美乱码精品一区二区 | 日韩欧美精品一区二区三区经典 | 中文有码在线视频 | 午夜精品久久久久久久99热影院 | 国产 欧美 日产久久 | 精品一区二区亚洲 | 高清久久久久久 | 天天综合久久 | 日韩 在线| 国产字幕在线看 | 99久久9 | 天天干人人 | .国产精品成人自产拍在线观看6 | 亚洲人成影院在线 | 黄色动态图xx| 一级精品视频在线观看宜春院 | 99久久精品国产网站 | 天天草天天干天天 | 麻豆视频免费入口 | 久久国产视屏 | 中文字幕第一页在线播放 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产91全国探花系列在线播放 | 黄色特一级片 | 日韩精品一区二区三区水蜜桃 | 日韩欧美中文 | 国内外成人免费在线视频 | 久久人人爽人人爽人人片av免费 | 三级毛片视频 | 久久国产午夜精品理论片最新版本 | 国产精品九色 | 人人爽人人av | 亚洲电影一级黄 | 国产流白浆高潮在线观看 | 黄色大片视频网站 | 一级黄色片在线播放 | 9999免费视频| 亚洲三级在线播放 | 成人avav| 国产一区二区三区高清播放 | 国产1区2 | 天堂在线v | 欧美日韩一区二区三区在线免费观看 | 国产精品一区二区免费视频 | 亚洲久草视频 | 91av在线不卡 | 天天操天天操天天操天天操天天操天天操 | 欧美在线观看禁18 | 久久这里只有精品首页 | 4438全国亚洲精品在线观看视频 | 久久99久久99精品中文字幕 | 在线免费观看黄色 | 亚洲五月六月 | 亚洲 欧洲 国产 精品 | 久久亚洲热 | 成人黄色小视频 | 日韩欧美综合 | 夜夜视频欧洲 | 亚洲高清在线精品 | 中文字幕视频网 | 日日夜夜综合网 | 久久精品网站免费观看 | 久久看片网站 | 久久久久成人免费 | 午夜视频在线网站 | 特级毛片爽www免费版 | 91精品国产欧美一区二区 | 久久综合偷偷噜噜噜色 | 亚洲精品免费观看视频 | 97网在线观看 | 日日干av| 青青草国产精品视频 | 最近中文字幕视频网 | 日韩精品免费一区 | 婷婷免费在线视频 | 欧美精品xx| 在线看毛片网站 | 日韩极品视频在线观看 | 中文字幕在线不卡国产视频 | 天天操天天操天天 | 国产原创在线视频 | 日韩av中文在线观看 | 视频成人免费 | 伊人激情网| 亚洲精品美女久久久久 | 天天操天操 | 国产精品自在线 | 日日干夜夜骑 | 成人aaa毛片 | 五月婷婷在线视频观看 | 国产精品久久久久久一二三四五 | 国产成人精品一区二区三区福利 | 国产一区二区视频在线 | 久久免费a | 亚洲成免费 | 国产麻豆剧果冻传媒视频播放量 | 成人午夜片av在线看 | 丁香综合网 | 国产精品久久久久久久7电影 | 免费a级大片 | 麻花传媒mv免费观看 | 日韩精品欧美一区 | 一区二区视频在线免费观看 | 国产精品美女久久久久久2018 | 精品久久久久久亚洲 | 亚洲精品乱码白浆高清久久久久久 | 日韩视频三区 | 亚洲精品成人网 | 久久综合之合合综合久久 | 日本系列中文字幕 | 亚洲 中文字幕av | 国产亚洲免费的视频看 | 久久久www成人免费精品张筱雨 | 美女在线免费视频 | 亚洲片在线| 最近中文字幕视频网 | 91在线看免费| 久久免费视频精品 | 久久精品99国产精品亚洲最刺激 | 国产精品2019 | 久章草在线 | 国产麻豆精品在线观看 | 欧美日韩免费一区二区三区 | 中文字幕资源网 国产 | 国产一级黄色电影 | 色网站在线观看 | 国产精品久久久久久久久久久久久久 | 午夜在线观看影院 | 国产成人一区二区精品非洲 | 人人插人人爱 | 色多多视频在线观看 | 天天亚洲 | 五月天六月婷婷 | 开心丁香婷婷深爱五月 | 97视频在线观看视频免费视频 | 国产网红在线观看 | 久久免费观看视频 | 久久免费的精品国产v∧ | 一区二区影院 | 国产精品999久久久 久产久精国产品 | 日本中文字幕在线视频 | 国产日本在线播放 | 久久xxxx | 四虎影视www | 色综合天 | 婷婷丁香九月 | 久久99精品久久久久久清纯直播 | 亚洲 综合 国产 精品 | 久久精品一| 日批视频| 日韩免费在线视频 | 五月天伊人网 | 久久96| 美女精品在线 | 久久不卡国产精品一区二区 | 麻豆91在线看 | 久草在线久草在线2 | 国产真实精品久久二三区 | 国产精品久久久久久久免费大片 | 91资源在线播放 | 国产黄色片在线 | 91精品在线免费观看视频 | 日韩xxxx视频 | 国产你懂的在线 | 91免费版在线观看 | 亚洲欧美国产精品 | 国产亚洲视频在线观看 | 日韩久久影院 | 日韩精品久久一区二区三区 | 久久久久久毛片 | 精品久久久久免费极品大片 | 日韩三级在线 | 亚洲在线精品 | 免费精品久久久 | 亚洲激情电影在线 | 在线观看日本高清mv视频 | 99国产一区 | 色婷婷综合久久久中文字幕 | 伊人夜夜 | 国产精品18p| 亚洲最新av在线网站 | 国产色拍拍拍拍在线精品 | 激情网婷婷 | 久久精品视频网 | 人人插人人草 | 精品免费一区 | 免费观看一级一片 | 99re热精品视频 | www91在线| 综合久色 | 亚洲一级性 | 激情丁香在线 | 九九久久电影 | 美女视频黄在线观看 | 福利在线看片 | 成人在线播放网站 | 国产特级毛片aaaaaa毛片 | 国产 日韩 欧美 中文 在线播放 | 国产亚洲精品久久久久久网站 | 亚洲激情电影在线 | 国产韩国日本高清视频 | 看黄色91| 国产精品久久久久久婷婷天堂 | 在线免费观看视频一区二区三区 | 黄色在线网站噜噜噜 | a在线观看国产 | 中文字幕在线看视频国产中文版 | 日韩免费网站 | 99re6热在线精品视频 | 91探花国产综合在线精品 | 亚洲天堂免费视频 | 国产一区在线视频 | 91x色| a级国产乱理伦片在线播放 久久久久国产精品一区 | 国产成人久久精品一区二区三区 | 日日躁你夜夜躁你av蜜 | www.狠狠色.com | 欧美日韩一级视频 | 欧美日韩精品在线视频 | 日韩高清免费在线 | 国产午夜精品一区二区三区欧美 | av 一区二区三区四区 | 国产精品va在线 | 久久久久久97三级 |