Android 에 명함 스 캔 기능 인 스 턴 스 코드 추가
개술
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 를 사용 하 는 것 을 권장 합 니 다.
마음 에 안 들 어~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.