/*
* Basic no frills app which integrates the ZBar barcode scanner with
* the camera.
*
* Created by lisah0 on 2012-02-24
*/
package com.kang.zbar;
import java.io.IOException;
import net.sourceforge.zbar.Config;
import net.sourceforge.zbar.Image;
import net.sourceforge.zbar.ImageScanner;
import net.sourceforge.zbar.Symbol;
import net.sourceforge.zbar.SymbolSet;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.AssetFileDescriptor;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PreviewCallback;
import android.hardware.Camera.Size;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.widget.FrameLayout;
import android.widget.TextView;
public class CameraTestActivity extends Activity {
private static final float BEEP_VOLUME = 0.10f;
private static final long VIBRATE_DURATION = 200L;
private Camera mCamera;
private CameraPreview mPreview;
private Handler autoFocusHandler;
private MediaPlayer mediaPlayer;
private boolean playBeep = true;
ImageScanner scanner;
private boolean previewing = true;
static {
System.loadLibrary("iconv");
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.zbar_capture);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
autoFocusHandler = new Handler();
mCamera = getCameraInstance();
/* Instance barcode scanner */
scanner = new ImageScanner();
scanner.setConfig(0, Config.X_DENSITY, 3);
scanner.setConfig(0, Config.Y_DENSITY, 3);
mPreview = new CameraPreview(this, mCamera, previewCb, autoFocusCB);
FrameLayout preview = (FrameLayout) findViewById(R.id.cameraPreview);
preview.addView(mPreview);
mCamera.setPreviewCallback(previewCb);
mCamera.startPreview();
previewing = true;
mCamera.autoFocus(autoFocusCB);
// 初始化声音和震动
AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE);
// 如果手机是震动模式就震动
if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
playBeep = false;
}
// 初始化声音
initBeepSound();
}
public void onPause() {
super.onPause();
releaseCamera();
}
/** A safe way to get an instance of the Camera object. */
public static Camera getCameraInstance() {
Camera c = null;
try {
c = Camera.open();
} catch (Exception e) {
}
return c;
}
private void releaseCamera() {
if (mCamera != null) {
previewing = false;
mCamera.setPreviewCallback(null);
mCamera.release();
mCamera = null;
}
}
private Runnable doAutoFocus = new Runnable() {
public void run() {
if (previewing)
mCamera.autoFocus(autoFocusCB);
}
};
PreviewCallback previewCb = new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
Camera.Parameters parameters = camera.getParameters();
Size size = parameters.getPreviewSize();
Image barcode = new Image(size.width, size.height, "Y800");
barcode.setData(data);
int result = scanner.scanImage(barcode);
if (result != 0) {
previewing = false;
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
SymbolSet syms = scanner.getResults();
playBeepSoundAndVibrate();// 播放声音和振动代表成功获取二维码
for (Symbol sym : syms) {
// 将扫描后的信息返回
Intent intent = new Intent();
intent.putExtra("Code", sym.getData());
setResult(RESULT_OK, intent);
finish();
}
}
}
};
// Mimic continuous auto-focusing
AutoFocusCallback autoFocusCB = new AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
autoFocusHandler.postDelayed(doAutoFocus, 1000);
}
};
/**
* 初始化声音
*/
private void initBeepSound() {
if (playBeep && mediaPlayer == null) {
setVolumeControlStream(AudioManager.STREAM_MUSIC);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnCompletionListener(beepListener);
AssetFileDescriptor file = getResources().openRawResourceFd(
R.raw.beep);
try {
mediaPlayer.setDataSource(file.getFileDescriptor(),
file.getStartOffset(), file.getLength());
file.close();
mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
mediaPlayer.prepare();
} catch (IOException e) {
mediaPlayer = null;
}
}
}
/**
* 播放声音和震动
*/
private void playBeepSoundAndVibrate() {
if (playBeep && mediaPlayer != null) {
mediaPlayer.start();
}
// 打开震动
Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(VIBRATE_DURATION);
}
private final OnCompletionListener beepListener = new OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.seekTo(0);
}
};
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ZBarDemo条形码扫描.zip (48个子文件)
ZBarDemo
bin
classes.dex 16KB
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
ic_launcher.png 4KB
drawable-mdpi
ic_launcher.png 2KB
ZBarDemo.apk 2.15MB
classes
com
kang
zbar
CameraTestActivity$4.class 831B
CameraTestActivity$2.class 3KB
CameraTestActivity.class 6KB
R$layout.class 415B
R$id.class 472B
R$drawable.class 392B
CameraTestActivity$3.class 1KB
R$attr.class 325B
R.class 535B
CameraPreview.class 3KB
ZBarDemoActivity.class 2KB
CameraTestActivity$1.class 1KB
R$string.class 412B
R$raw.class 370B
resources.ap_ 18KB
res
drawable-ldpi
ic_launcher.png 2KB
raw
beep.ogg 6KB
.svn
all-wcprops 236B
prop-base
beep.ogg.svn-base 53B
props
tmp
prop-base
props
text-base
text-base
beep.ogg.svn-base 6KB
entries 410B
format 2B
drawable-hdpi
ic_launcher.png 4KB
values
strings.xml 182B
drawable-mdpi
ic_launcher.png 3KB
layout
main.xml 804B
zbar_capture.xml 930B
assets
gen
com
kang
zbar
R.java 1KB
proguard.cfg 1KB
src
com
kang
zbar
CameraPreview.java 3KB
ZBarDemoActivity.java 1KB
CameraTestActivity.java 5KB
.project 844B
.classpath 416B
project.properties 360B
AndroidManifest.xml 1KB
libs
armeabi-v7a
libiconv.so 876KB
libzbarjni.so 104KB
armeabi
libiconv.so 880KB
libzbarjni.so 111KB
x86
libiconv.so 908KB
libzbarjni.so 167KB
zbar.jar 6KB
共 48 条
- 1
资源评论
- 5ibc2014-02-18非常感谢,正好用了
- bitxinhai2014-09-04为什么不可以用呢?
- ak2020132013-11-21资源有问题 楼主人品有问题
无缘公子
- 粉丝: 408
- 资源: 40
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功