Android 에 명함 스 캔 기능 인 스 턴 스 코드 추가

안 드 로 이 드 폰 이 명함 스 캔 을 통 해 명함 정 보 를 얻 으 려 면 맥 에서 제공 하 는 제3자 SDK,즉 Maketion ScanCard SDK,맥 에서 클 라 우 드 명함 인식 서 비 스 를 찾 을 수 있다.공식 홈 페이지http://www.maketion.com/。
개술
Maketion ScanCardSDK(이하 SDK)는 제3자 파트너 에 게 맥 을 연결 해 클 라 우 드 명함 인식 서 비 스 를 제공 하 는 것 으로,파트너 는 먼저 key 와 secure 를 신청 해 야 사용 할 수 있다.
SDK 는 독립 적 으로 실행 할 수 없 으 며,사용 시 Android 의 Project 에 삽입 해 야 합 니 다.
SDK 는 Android 2.1 버 전 및 그 이상 버 전의 Project 를 지원 합 니 다.
맥 에서 식별 서 비 스 를 찾 을 수 있 는 절 차 는 인증->SDK 카메라 페이지 열기->명함 촬영->업로드 성공 확인->데이터 가 져 오기 입 니 다.
2.설치 과정
1.프로젝트 의"lib/"디 렉 터 리 에"ScanCardSdk.jar"를 추가 합 니 다.
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"의탭 에 계속 등록 정 보 를 추가 합 니 다.

<activity android:name="cn.maketion.uploadSdk.MkxActivityCamera"/>
카메라 페이지
cn.maketion.uploadsdk.Mkx Activity Camera 는 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) 
명함 정 보 를 얻 는 방법 은 두 가지 가 있 습 니 다.명함 의 키워드 uid 를 통 해 명함 정 보 를 얻 습 니 다.한 시간 후의 모든 명함 정 보 를 가 져 옵 니 다.
인자 uids:문자열 배열,모든 문자열 은 명함 의 uid 입 니 다.
매개 변수 time:시간,1970 년 1 월 1 일부 터 거 친'초'(이 매개 변수 가 0 이면 모든 명함 정 보 를 얻 고 삭 제 된 명함 과 식별 할 수 없 는 명함 은 포함 되 지 않 음).
파라미터 back:리 셋 인터페이스
4.감청 업로드 사건

public void setUploadListener(MkxBackUpload back)
리 셋 함 수 를 설정 하여 업로드 이 벤트 를 감청 합 니 다.
파라미터 back:인터페이스 리 셋,제5 장 제4 절 참조
5.명함 사진 올 리 기

public void uploadImage(String uuid)
업로드 이 벤트 를 감청 하 는 데 실 패 했 을 때 이 함 수 를 통 해 다시 업로드 할 수 있 습 니 다.
인자 uid:올 릴 명함 uid
6.Sdcard 그림 캐 시 경로 설정

public void setSdcardPath(String sdcardPath)
Sdcard 경 로 를 설정 하면 명함 에 생 성 된 그림 을 촬영 할 때 이 경 로 를 유지 합 니 다.
인자 sdcardpath:Sdcard 의 캐 시 경로,예 를 들 어 setSdcardPath("ImageCache");
촬영 한 명함 은'\sdcard\ImageCache\'경로 에 저 장 됩 니 다.
7.명함 원본 가 져 오기

public void getCardImage(String uuid, MkxBackPicture back)
명함 의 uid 를 통 해 명함 원 도 를 가 져 옵 니 다.이 함 수 는 그림 캐 시 경로 에 해당 하 는 원본 그림 이 있 는 지 확인 합 니 다.
인자 uid:원본 명함 을 가 져 올 uid
파라미터 back:리 셋 인터페이스,
5.리 턴 인터페이스
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 일 때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);
} 
매개 변수 코드:네트워크 호출 상태;
파라미터 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);
}
매개 변수 코드:네트워크 호출 상태;
파라미터 errInfo:네트워크 호출 이 실 패 했 을 때 오류 참고 정 보 를 되 돌려 줍 니 다.
인자 uid:현재 명함 uid 업로드;
파라미터 status:STATUSSTART 는 업로드 시작 을 표시 합 니 다,STATUSSUCESS 는 업로드 성공,STATUSERROR 는 업로드 에 실 패 했 음 을 나 타 냈 다.
5.명함 원본 이미지 리 셋 인터페이스 가 져 오기

public interface MkxBackPicture {
void onBack(File picture);
}
매개 변수 picture:명함 원본 파일,picture 가 null 이면 원본 그림 을 가 져 오 는 데 실 패 했 음 을 표시 합 니 다.
소프트웨어 패키지 의 계층 구조

이어서 나 는 명함 스 캔 기능 을 테스트 하기 위해 작은 데 모 를 만 들 었 다.
항목 내용

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" />
Maketion Activity 는 두 가지 방법 으로 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 소스 가 안 보 여서 어 쩔 수 없어~
실행 후 모든 사진 에서 정 보 를 얻 을 수 있 는 것 은 아 닙 니 다.전체적으로 말 하면 별로 좋 지 않 습 니 다.나중에 QR 코드 를 사용 하 는 것 이 좋 거나 nfc 를 사용 하 는 것 을 권장 합 니 다.


마음 에 안 들 어~

좋은 웹페이지 즐겨찾기