哪些Android中进入扫描名片效应

要想完成android手提式有线电话机通过扫描名片,获得名片消息,能够采取脉可寻提供的第1方SDK,即Maketion
ScanCardSDK,脉可寻云名片识别服务。她们的官方网站为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”文件里添加以下放权力限:

 

   
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的实例。

贰 、验证成效

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

public boolean isAuth()

public void clearAuth()

 

表达功用包涵几个函数:auth()提交声明;isAuth()判断验证状态;clearAuth()清除验证状态。

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

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

参数back:回调接口

③ 、获取名片音信

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

public void getDataWithTime(long time, final MkxBackCards back)

 

取得著名影片音信有两种办法:通过名片的要紧字uuid获取名片消息;获取三个时间点之后的具知名片音信。

参数uuids:字符串数组,各类字符串为三个片子的uuid;

参数time:时间点, 1968年10月十十六日启幕通过的“秒”(数若此参数为0代表收获具著名片信息,不带有已去除的片子和不能够分辨的名片);

参数back:回调接口

④ 、监听上传事件

public void setUploadListener(MkxBackUpload back)

通过安装回调函数,监听上传事件。

参数back:回调接口, 见第④章第6节

伍 、上传名片图片

public void uploadImage(String uuid)

当监听上传事件时产生上传退步,能够因此此函数进行再一次上传。

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

陆 、设置Sdcard图片缓存路径

public void setSdcardPath(String sdcardPath)

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

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

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

⑦ 、获取名片原图

publicACCESS, void getCardImage(String uuid, MkxBackPicture back)

经过名片的uuid获取名片原图。此函数会先反省体育场合片缓存路径是或不是留存对应的原图(名片uuid即为名片在缓存路径下的名字),若存在则一直回到此文件名,若不存在则先下载再回去。

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

参数back: 回调接口,

⑤ 、回调接口

一 、错误消息

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时表示接口调用成功,不然表示接口调用战败。

贰 、验证回调接口

public interface MkxBackAuth extends MkxErrorCode {

    void onBack(int code, String errInfo);

}

 

参数code:互连网调用状态,如若code值为CODE_SUCCESS意味着验证通过;

参数errInfo:当互联网调用失利时,再次来到错误参考新闻。

叁 、获取名片音讯回调接口

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:重返的片子新闻数组。

四 、上传监听回调接口

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表示上传失利。

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

public interface MkxBackPicture {

    void onBack(File picture);

}

 

参数picture:名片原图文件,若picture为null表示收获原图退步;

软件包的分支结构

ACCESS 1

 

接下去看,作者本人做了一个小demo,测试扫描名片效应

类别内容

ACCESS 2

在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。

ACCESS 3

ACCESS 4

结果白璧微瑕~~

 

相关文章