Android中加入名片扫描功能实例代码

时间:2021-05-20

要想实现android手机通过扫描名片,得到名片信息,可以使用脉可寻提供的第三方SDK,即Maketion ScanCard SDK,脉可寻云名片识别服务。他们的官方网站为http://.example.maketiontest.MaketionActivity" />

MaketionActivity中主要是两个方法takepic()方法和authenticateAccount()方法。

首先在onCreate方法中,得到MkxServer实例,并判断是否已经验证

@Overrideprotected void onCreate(Bundle arg0) {// TODO Auto-generated method stubsuper.onCreate(arg0);server = MkxServer.getServer(getApplication());isInit = server.isAuth();if (isInit) {takepic();} else {authenticateAccount();}}

如果已经验证就进行拍照,如果还没有验证,就验证

authenticateAccount方法

/*** 验证账户*/private void authenticateAccount() {if (!isInit) {server.auth(KEY, SECRET, PUID, new MkxBackAuth() {@Overridepublic void onBack(int code, String errInfo) {if (code == MkxErrorCode.CODE_SUCCESS) {isInit = server.isAuth();if (isInit) {Log.i(TAG, "验证成功!");takepic();} else {Log.i(TAG, "验证失败!");finish();}} else {Log.i(TAG, errInfo);finish();}}});}}

拍照功能

/*** 拍照操作*/private void takepic() {if (isInit) {server.setUploadListener(new MkxBackUpload() {@Overridepublic void onBack(int code, String errInfo, String uuid,int status) {Log.i(TAG, uuid);muuid = uuid;switch (status) {case STATUS_ERROR:// 上传出错if (uploadTimes <= 5) {// 由于重新上传与拍照上传都是调用统一上传函数,因此需要限制重传次数,避免上传图片时产生无限递归uploadTimes++;server.uploadImage(uuid);// 重新上传} else {// 重新上传的次数达到上限时,不再上传,保存不能上传图片的uuiduploadTimes = 0;upLoadFails.add(uuid);Log.i(TAG, "上传失败,等待网络通畅时再重新上传");}break;case STATUS_START:// 开始上传break;case STATUS_SUCESS:// 上传成功server.getDataWithUUID(new String[] { uuid },new MkxBackCards() {@Overridepublic void onBack(int code, String cards,MkxCard[] arg2) {// TODO Auto-generated method stubif (code == MkxErrorCode.CODE_SUCCESS) {if (isInit) {                            //上传成功则进入名片页面Intent intent = new Intent(MaketionActivity.this,CardDetailActivity.class);intent.putExtra("uuid", muuid);startActivity(intent);} else {Log.i(TAG, "还未验证账户");}}}});Log.i(TAG, "上传成功");break;}}});Intent intent = new Intent(this, MkxActivityCamera.class);startActivity(intent);} else {Log.i(TAG, "还未验证账户,请验证账户再获取数据");finish();}}

CardDetailActivity

protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);Log.i(TAG, "CardDetailActivity------>onCreate");setContentView(R.layout.card_detail_activity);server = MkxServer.getServer(getApplication());if (getIntent() != null&& !TextUtils.isEmpty(getIntent().getStringExtra("uuid"))) {String uuid = getIntent().getStringExtra("uuid").toString();// 获取单张名片信息server.getDataWithUUID(new String[] { uuid }, new MkxBackCards() {@Overridepublic void onBack(int code, String info, MkxCard[] cards) {if (code == MkxErrorCode.CODE_SUCCESS) {Log.i(TAG, " " + cards.length);if (cards.length != 0) {setView(cards);}}}});} else {Log.i(TAG, "没有获取uuid");}}

让我比较疑惑的事情是为什么在获得单张名片信息的时候,回调方法onBack中,参数是MkxCard[] cards

为什么是个对象数组呢= =。看不到SDK的源码,没办法~

运行之后,并不是每张照片都能得到信息,总的来说,还是不怎么好用,建议以后用二维码会更好,或者用nfc。

结果不尽人意~~


声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章