iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android中加入名片扫描功能实例代码
  • 256
分享到

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

名片Android 2022-06-06 08:06:59 256人浏览 安东尼
摘要

要想实现Android手机通过扫描名片,得到名片信息,可以使用脉可寻提供的第三方SDK,即Maketion ScanCard SDK,脉可寻云名片识别服务。他们的官方网站为Ht

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

一、概述

Maketion ScanCardSDK(以下简称SDK)是提供给第三方合作伙伴接入脉可寻云名片识别服务,合作伙伴需要先申请key和secure才可以使用。

SDK不能独立运行,使用时需要嵌入到Android的Project中。

SDK支持Android2.1版本及以上版本的Project。

脉可寻识别服务的流程为:认证->打开SDK相机页面->拍摄名片->确认上传成功->获取数据。

二、安装过程

1.将“ScanCardSdk.jar”加到工程的“lib/”目录下

2.将“libappmain.so”加到工程的“lib/armeabi/”目录下

3.在工程的“AndroidManifest.xml”文件里添加以下权限:


<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

4.继续在“AndroidManifest.xml”的<application>标签里添加注册信息:


<activity android:name="cn.maketion.uploadSdk.MkxActivityCamera"/>

三、相机页面

cn.maketion.uploadSdk.MkxActivityCamera是sdk提供的基于Activity相机页面,用于拍摄名片并自动提交云端识别。可以使用

如下方式调用:


Intent intent = new Intent(this, MkxActivityCamera.class);
startActivity(intent); 

四、SDK函数

cn.maketion.uploadSdk.MkxServer类是个单例。首先获取此类的实例,然后通过实例调用此类的所有功能函数

1、获取MkxServer类实例


public static MkxServer getServer(Application app)

通过此函数可以获取MkxServer的实例。

2、验证功能


public void auth(String key, String secure, String uid, MkxBackInit back)
public boolean isAuth()
public void clearAuth() 

验证功能包括三个函数:auth()提交验证;isAuth()判断验证状态;clearAuth()清除验证状态。

参数key:由脉可寻名片识别服务申请获得;

参数secure:由脉可寻名片识别服务申请获得;

参数back:回调接口

3、获取名片信息


public void getDataWithUUID(String[] uuids, final MkxBackCards back)
public void getDataWithTime(long time, final MkxBackCards back) 

获取名片信息有两种方式:通过名片的关键字uuid获取名片信息;获取一个时间点之后的所有名片信息。

参数uuids:字符串数组,每个字符串为一个名片的uuid;

参数time:时间点, 1970年1月1日开始经过的“秒”(数若此参数为0表示获取所有名片信息,不包含已删除的名片和无法识别的名片);

参数back:回调接口

4、监听上传事件


public void setUploadListener(MkxBackUpload back)

通过设置回调函数,监听上传事件。

参数back:回调接口, 见第五章第4节

5、上传名片图片


public void uploadImage(String uuid)

当监听上传事件时发生上传失败,可以通过此函数进行重新上传。

参数uuid:要上传的名片的uuid

6、设置Sdcard图片缓存路径


public void setSdcardPath(String sdcardPath)

设置Sdcard路径后,拍摄名片所生成的图片,会保持在此路径下。

参数sdcardPath:Sdcard上的缓存路径,例如:setSdcardPath("ImageCache");

拍摄的名片将保存到“\sdcard\ImageCache\”路径下。

7、获取名片原图


public void getCardImage(String uuid, MkxBackPicture back)

通过名片的uuid获取名片原图。此函数会先检查图片缓存路径是否存在对应的原图(名片uuid即为名片在缓存路径下的名字),若存在则直接返回此文件名,若不存在则先下载再返回。

参数uuid: 要获取原图的名片的uuid

参数back: 回调接口,

五、回调接口

1、错误信息


public interface MkxErrorCode {
int CODE_SUCCESS = 0;
int CODE_FAIL_RESULT = 1; // 结果错误
int CODE_FAIL_DECODE = 2; // JSON解析时出错
int CODE_FAIL_NULL = 3; // 网络错误,包括500或502错误
int CODE_FAIL_TIMEOUT = 4; // 连接超时
int CODE_FAIL_NETWORK = 5; // 网络错误,无网络或网络不可用
int CODE_FAIL_REPEAT = 6; // 接口重复调用,未等到接口返回就进行二次调用
int CODE_FAIL_UNKNOW = 9; // 未知错误
} 

所有网络访问函数调用时都会返回状态码code,当code的值为CODE_SUCCESS时表示接口调用成功,否则表示接口调用失败。

2、验证回调接口


public interface MkxBackAuth extends MkxErrorCode {
void onBack(int code, String errInfo);
} 

参数code:网络调用状态,如果code值为CODE_SUCCESS表示验证通过;

参数errInfo:当网络调用失败时,返回错误参考信息。

3、获取名片信息回调接口


public class MkxCard {
public String carduuid ; // 名片uuid 
public String name ; // 姓名 
public String duty ; // 头衔 
public String mobile1 ; // 手机1 
public String mobile2 ; // 手机2 
public String email ; // 邮箱 
public String tel1 ; // 电话1 
public String tel2 ; // 电话2 
public String fax ; // 传真 
public String cname ; // 公司名 
public String address ; // 地址 
public String WEBsite ; // 网址 
public String loGo ; // 头像 
public long createtime ; // 创建时间 
public long updatetime ; // 更新时间 
public String fields ; // 已完成字段,"100"为全部完成
public int audit ; // 是否无法识别,大于1就是无法识别 
public int flag ; // 标识,0为有效,1为已删除
} 
public interface MkxBackCards extends MkxErrorCode {
void onBack(int code, String errInfo, MkxCard[] cards);
} 

参数code:网络调用状态;

参数errInfo:当网络调用失败时,返回错误参考信息;

参数cards:返回的名片信息数组。

4、上传监听回调接口


public interface MkxBackUpload extends MkxErrorCode {
int STATUS_START = 0;
int STATUS_SUCESS = 1;
int STATUS_ERROR = 2;
void onBack(int code, String errInfo, String uuid, int status);
}

参数code:网络调用状态;

参数errInfo:当网络调用失败时,返回错误参考信息;

参数uuid:当前上传名片uuid;

参数status:STATUS_START表示开始上传,STATUS_SUCESS表示上传成功,STATUS_ERROR表示上传失败。

5、获取名片原图回调接口


public interface MkxBackPicture {
void onBack(File picture);
}

参数picture:名片原图文件,若picture为null表示获取原图失败;

软件包的分层结构


接下来看,我自己做了一个小demo,测试扫描名片功能

项目内容

在Mainfest.xml文件中加入权限和Activity


<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<activity android:name="cn.maketion.uploadSdk.MkxActivityCamera" />
<activity android:name="com.example.maketiontest.CardDetailActivity" />
<activity android:name="com.example.maketiontest.MaketionActivity" />

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

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


@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.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() {
@Override
public 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() {
@Override
public 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 {// 重新上传的次数达到上限时,不再上传,保存不能上传图片的uuid
uploadTimes = 0;
upLoadFails.add(uuid);
Log.i(TAG, "上传失败,等待网络通畅时再重新上传");
}
break;
case STATUS_START:// 开始上传
break;
case STATUS_SUCESS:// 上传成功
server.getDataWithUUID(new String[] { uuid },
new MkxBackCards() {
@Override
public void onBack(int code, String cards,
MkxCard[] arg2) {
// TODO Auto-generated method stub
if (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 stub
super.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() {
@Override
public 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。

结果不尽人意~~


您可能感兴趣的文章:Android基于zxing的二维码(网格)扫描 仿支付宝网格扫描Android实现二维码扫描和生成的简单方法Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题Android基于google Zxing实现各类二维码扫描效果Android应用中使用ContentProvider扫描本地图片并显示Android平台生成二维码并实现扫描 & 识别功能Android扫描本地音乐文件开发案例分享Android波纹扩散效果之仿支付宝咻一咻功能实现波纹扩散特效Android app第三方支付宝支付接入教程Android实现支付宝AR扫描动画效果


--结束END--

本文标题: Android中加入名片扫描功能实例代码

本文链接: https://www.lsjlt.com/news/25520.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中怎么实现二维码扫描功能
    这期内容当中小编将会给大家带来有关Android中怎么实现二维码扫描功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 开发准备1.1 android studio 安装&emsp;&e...
    99+
    2023-06-04
  • 基于barcodescanner实现Android二维码扫描功能
    二维码扫描现在成为一种非常常见的APP基础功能,附录1是我曾经用过的二维码/条形码扫描开源项目,但是附录1的项目集成和二次定制比较繁琐和麻烦,因此可以发现不少人基于ZXing做了二次的开发,并贡献出这些项目,发到github上,其中barc...
    99+
    2023-05-30
    android 二维码 barcodescanner
  • Android图片采样缩放功能实例代码
    为什么要对Android中的图片进行采样缩放呢?是为了更加高效的加载Bitmap。假设通过imageView来显示图片,很多时候ImageView并没有图片的原始尺寸那么大,这时候把整张图片加载进来后再设给ImageView是没有必要的,因...
    99+
    2023-05-30
    android 采样 缩放
  • 怎么在Android中实现扫码功能
    这篇文章将为大家详细讲解有关怎么在Android中实现扫码功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、引入implementation 'com.journeya...
    99+
    2023-06-15
  • Android开发怎么实现模仿360二维码扫描功能
    小编给大家分享一下Android开发怎么实现模仿360二维码扫描功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:一、效果图:二、框架搭建首先,下载最新...
    99+
    2023-05-30
    android
  • VuePC端实现扫码登录功能示例代码
    目录需求描述思路解析前端功能实现如何控制二维码的时效性?前端如何获取服务器二维码的状态?本篇文章给大家带来了关于Vue的相关知识,其中主要介绍了在PC端实现扫码的原理是什么?怎么生成...
    99+
    2023-01-28
    Vue PC端扫码登录 Vue 扫码登录 vue登录功能
  • Android中复制图片的实例代码
    activity_main.xml中的配置<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc...
    99+
    2023-05-30
    android 复制图片 roi
  • Redis实现排名功能的示例代码
    目录前言一.实现思路二.具体实现小结前言 之前在消费金融平台的时候,公司有一个专门给线下销售人员使用的APP,APP记录销售推广公司贷款产品赚取的佣金以及一些门店开拓和打卡的功能,后...
    99+
    2024-04-02
  • Android中imageView图片放大缩小及旋转功能示例代码
    一、简介二、方法1)设置图片放大缩小效果将<ImageView>标签中的android:scaleType设置为"fitCenter"android:scaleType="fitCenter"...
    99+
    2023-05-30
    imageview 放大 缩小
  • PHP教程:如何在容器中实现二维码扫描功能?
    二维码扫描功能已经成为现代社会中非常常见的一种功能,它的应用场景也越来越广泛。而在开发中,我们经常需要在应用程序中加入二维码扫描功能。本文将介绍如何在容器中实现二维码扫描功能。 一、准备工作 在开始之前,我们需要准备一些东西: 安装 D...
    99+
    2023-07-09
    教程 二维码 容器
  • Go 语言中如何使用接口实现二维码扫描功能?
    随着移动互联网的快速发展,二维码已经成为了一种不可或缺的技术。而在开发过程中,如何快速、高效地实现二维码扫描功能是一个关键问题。本文将介绍如何使用 Go 语言中的接口实现二维码扫描功能,帮助开发者快速实现这一功能。 一、了解二维码扫描的原...
    99+
    2023-08-27
    二维码 索引 接口
  • Springboot实现图片上传功能的示例代码
    首先对图片进行UUID 防止图片被覆盖以及爬图 UUID的生成规则:日期时间,MAC地址,HashCode,随机数(多种之一) 开发上传接口,两处红字意思是生成文件夹和生成目标文件,...
    99+
    2024-04-02
  • C#实现图片轮播功能的示例代码
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-19
    C#图片轮播功能 C#图片轮播 C# 轮播
  • Golang实现图片上传功能的示例代码
    目录1.前端代码2.JS代码3.后端代码该代码为使用beego实现前后端图片上传。话不多说,直接上代码。 1.前端代码 html代码: <div class="col-5 f...
    99+
    2024-04-02
  • Android左滑返回功能的实现示例代码
    前几天用了个app发现左滑可以返回首页,发现这个功能很炫酷,就想着自己能不能做出来,于是研究了一下原理 将activity的背景设置为透明同时设置切换动画 手指滑动的时候,根View跟着滑动,滑倒一定的距离就finish掉。 原理很简...
    99+
    2023-05-31
    android 左滑返回 roi
  • Vue实现输入框@功能的示例代码
    目录前言成员列表创建使用输入框获取光标的坐标保存光标插入文本运行结果总结前言 前几篇文章中分别介绍了如何实现聊天输入框的双向绑定、回车键发送、粘贴文本图片等功能,本着完善输入框的目的...
    99+
    2024-04-02
  • 基于Socket.IO实现Android聊天功能代码示例
    一、简述Socket.IO是一个完全由JavaScript实现、基于Node.js、支持WebSocket的协议用于实时通信、跨平台的开源框架,它包括了客户端的JavaScript和服务器端的Node.js。该种官方介绍看起来有点懵逼,简而...
    99+
    2023-05-30
    android socket.io roi
  • Android实现显示和隐藏密码功能的示例代码
    在前端中我们知道用javascript就可以可以很容易实现,那么在Android中怎么实现这个功能呢? Java代码 package com.example.test2; impo...
    99+
    2024-04-02
  • 怎么在HTML5中使用MUI框架实现一个二维码扫描功能
    怎么在HTML5中使用MUI框架实现一个二维码扫描功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。<!doctype html>&nbs...
    99+
    2023-06-09
  • Vue实现文件切片上传功能的示例代码
    目录流程简说获取文件的 MD5 唯一标识码文件切片获取文件名 name分片文件大小 chunkSize文件切片 chunkList 列表切片总数 chunks切片大小 size合并在...
    99+
    2022-11-13
    Vue文件切片上传 Vue文件切片
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作