统一标识代码注册管理中心

首页 开放平台 下载SDK 开发者指南 登录注册

技术文档 >> Android版SDK 开发指南

Android版SDK 开发指南

简介

申请授权

接入指南

SDK 下载

IOS版SDK 开发指南

简介

接入指南

SDK 下载

接入指南

3.1 下载SDK

下载 AndroidSDK.zip并解压缩

3.2 导入SDK

Eclipse工程配置方法

步骤1:将下载包中的libs 文件夹合并到本地工程libs子目录下;在Eclipse中右键工程根目录,选择Properties -> Java Build Path -> Libraries,然后点击Add External JARs... 选择指向jar的路径,点击OK,即导入成功。(ADT17及以上不需要手动导入),拷贝完成后的工程目录如下图所示;

步骤2:将下载包中的res资源文件夹合并到本地工程res子目录下。

Android Studio工程配置方法

步骤1:添加so文件,在src/main/目录下新建jniLibs目录,并将文件放入其中,如下图所示:

so的配置也可以参考demo给出的目录结构,在app工程路径下,新建libs,并在其中放入对应CPU架构的so文件,此时在build.gradle中需要进行如下配置:

步骤2:添加jar包,将jar包放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。或者使用菜单栏 选择 File ->Project Structure->Modules-> Dependencies。点击绿色的加号选择File dependency. 然后选择要添加的jar包即可,此时build.gradle中会自动生成如下信息:

或者直接使用引入libs下所有jar包的方式,如下图所示:

步骤3:将下载包中的res资源文件夹合并到本地工程res子目录下。

3.3获得Appkey

1、在idcode的管理后台中创建App

2、创建成功后获取应用key

3.4 配置manifest

3.5 权限获取说明

3.6 填写appkey

将YOUR_APPKEY替换成您在idcode后台申请的应用appkey

3.7 SDK调用示例

3.7.1 SDK初始化

在使用SDK之前,需要对SDK进行初始化,由于调用SDK中的任何方法前都需要初始化SDK,所以建议在Application中调用

public class MyApplication extends Application{
@Override
public void onCreate(){
super.onCreate();
//初始化SDK
IDcodeSDKInitializer.initialize(getApplicatioContext());
}
}

3.7.2扫码调用

步骤1:使用意图调用扫码界面

Intent i=new Intent(MainAcitivity.this,CaptureActivity.class);
startActivityForResult(i,REQUEST_SCAN);

步骤2:在扫码界面(demo中为CaptureActivity)的initCamera中调用SDKManager的 startOptimizePreviewDecode方法

构造函数:
startOptimizePreviewDecode(Context context,String charset,boolean isFilter,Point cameraResolution, Rect frameRectInPreview,Camera camera,IPreviewDecodeCallback previewDecodeCallback)

参数Context:Context
参数charset:解码字符集(建议使用UTF-8,且字符集只对QR码有效)
参数isFilter:是否对扫码结果进行过滤,过滤(true)/不过滤(false);考虑解码效率,建议此参数设置为false,如需过滤扫码结果,可单独调用过滤功能,详见3.7.4
参数cameraResolution:Camera分辨率
参数frameRectInPreview:解码区域
参数IPreviewDecodeCallback:扫码结果回调类,其中回调方法onCallback(Result result,Bundle bundle)提供了扫码返回的Result结果类和封装了扫码结果的Bundle类,Result类包含了扫码结果信息,可作为扫码过滤方法的参数。

说明:如果用户想在startOptimizePreviewDecode方法中开启过滤开关,可以在startOptimizePreviewDecode方法之前调用setFilterState(FilterState filterState)方法,FilterState 接口返回过滤开始的回调方法。

步骤3:在调用扫码的Activity中(demo中为MainActivity),实现OnActivityResult方法,展示扫码结果:

protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
If(resultCode==RESULT_OK){
If(requestCode==REQUEST_SCAN){
Bundle bundle=data.getExtras();
If(bundle!=null){
String scanResult=bundle.getString(Res.SCAN_RESULT);
int resultType=bundle.getInt(Res.SCAN_RESULT_TYPE);
Byte[] b=bundle.getByteArray(Res.SCAN_RESULT_IMAGE);
Bitmap bmp=BitmapFactory.decodeByteArray(b,0,b.length);
imageIv.setImageBitmap(bmp);
resultEt.setText(scanResult);
resultTypeSp.setSelection(resultType);
}
}
}
}

解码说明:如果您需要单独调用解码,可使用下面方法
(1)解析全部码
SdkDecode.decodeAllMode(context, data, width, height, source, characterSet)
(2)指定模式解码
SdkDecode.decodeByMode(context, data, width, height, source, decodeMode, characterSet)
(3)解析QR码
SdkDecode.decodeQrcode(context, source, characterSet);
(4)多模式解码(默认解析全部码)
SdkDecode.decodeMultiMode(context, data, width, height,source,characterSet);
(5)SDK提供了多种码制解码开关,可配合多模式解码(4)一起使用,如下:
扫描条形码SdkDecode.setScanOneD(boolean scanOneD)
扫描QR码SdkDecode.setScanQR(boolean scanQR)
扫描DM码SdkDecode.setScanDM(boolean scanDM)
扫描龙贝码SdkDecode.setScanLB(boolean scanLB)
扫描汉信码SdkDecode.setScanHX(boolean scanHX)
扫描GM码SdkDecode.setScanGM(boolean scanGM)
(6)解码参数统一说明
参数Context: context上下文
参数data:Camera.PreviewCallback的onPreviewFrame(byte[] data, Cameracamera)方法中的采集的data
参数width:camera扫描区域分辨率的宽
参数 height:camera扫描区域分辨率的高
参数 source:根据摄像头采集的PlanarYUVLuminanceSource数据
参数decodeMode:指定模式解码方法的解码模式
参数characterSet:解码字符集(只对QR码有效)

3.7.3生成码调用

说明:
1、龙贝码生成建议控制在40个字符以内,其他码生成建议不要超过100字符
2、GM码和汉信码需要在联网状态下生成
3、条形码只支持EAN-13格式

步骤1:初始化SdkEncode类

构造方法:SdkEncode(Context context ,EncodeCallback callback)

参数context:context 参数EncodeCallback:生成码回调类,生成成功后在其回调方法generateBitmap(Bitmap bitmap)中可以获得生成的图片。

步骤2:调用SdkEncode类的encodeImage()方法生成图片

构造函数:encodeImage(String str,int width,int height,int type,boolean isFilter,String charset)

参数str:待生成的内容
参数width:生成图片的宽(此参数只对条形码,QR码和龙贝码有效)
参数height:生成图片的高(此参数只对条形码,QR码和龙贝码有效)
参数type:生成码的类型(0.条形EAN_13码,1.QR码,2.龙贝码,3.DM码,4.GM码,6.汉信码,7.默认生成QR码)
参数isFilter:是否对生成内容进行过滤,过滤(true)/不过滤(false),默认为false,用户可以根据自己的需要选择是否过滤
参数charset:生成码字符集(建议UTF-8,且字符集只对QR码,龙贝码有效)

步骤3:获取生成图片

可以在EncodeCallback的回调方法中获取生成的图片:
public void generateBitmap(Bitmap bitmap){
If(bitmap!=null){
imageIv.setImageBitmap(bitmap);
}
}

3.7.4扫描结果过滤功能1

建议:如需单独调用过滤功能,建议使用过滤功能2

步骤1:初始化FilterUtils类

构造方法:FilterUtils(Context context ,FilterCallback callback)

参数context:context 参数FilterCallback:过滤回调类,在回调方法中可获得过滤后的字符串

步骤2:执行FilterUtils的wordsFilter(Result rawResult)进行扫码结果的过滤,其中Result为扫码成功后返回的Result结果类

filterUtils.wordsFilter(rawResult);

步骤3:在FilterUtils回调方法filterCallback(String str)中获取回调结果,str为过滤后的字符串;

public void filterCallback(String str) {}

3.7.5扫描结果过滤功能2
步骤1:初始化SDKFilter类
构造方法:SDKFilter(Context context ,SDKFilterCallback callback)
参数context:context
参数SDKFilterCallback:过滤回调类
步骤2:执行SDKFilter的wordsFilter(Result rawResult)进行扫码结果的过滤,其中Result为扫码成功后返回的Result结果类
SDKFilter.wordsFilter(rawResult);
步骤3:同步骤2,也可执行SDKFilter的wordsFilter(String str)进行内容过滤,其中str为需要过滤的字符串
SDKFilter.wordsFilter(str);
步骤4:在SDKFilter回调方法onFilterResult(FilterResult filterResult)中获取回调结果,filterResult为过滤结果
public void onFilterResult(FilterResult filterResult)

3.7.6图片解码
步骤1:初始化SDKImageDecode类
构造方法:SDKImageDecode(Context context)
参数context:context
SDKImageDecode sdkImageDecode=new SDKImageDecode(context);
步骤2:执行SDKImageDecode的decodeImage(Bitmap bitmap)或者decodeImage(Bitmap bitmap,int Mode)进行图片解码,其中bitmap为需要解析的图片,Mode为解码模式,,包含Mode.ONE_D_MODE(条形码),Mode.QR_CODE_MODE(QR码),MODE.DATA_MATRIX_MODE(DM码),MODE.LB_MODE(龙贝码),MODE.HX_MODE(汉信码),MODE.GM_MODE(GM码),支持指定模式解码,两个解码方法返回解码结果Result类
1、解全部码制
sdkImageDecode.decodeImage(bitmap);
2、多模式解码
sdkImageDecode.decodeImage(bitmap,Mode.ONE_D_MODE|Mode.QR_CODE_MODE|
Mode.DATA_MATRIX_MODE|Mode.LB_MODE|Mode.HX_MODE|Mode.GM_MODE);