/*
* Copyright (C) 2008 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.zxing.camera;
import java.io.IOException;
import android.content.Context;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.hardware.Camera;
import android.os.Build;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.SurfaceHolder;
/**
* This object wraps the Camera service object and expects to be the only one talking to it. The
* implementation encapsulates the steps needed to take preview-sized images, which are used for
* both preview and decoding.
*
*/
public final class CameraManager {
private static final String TAG = CameraManager.class.getSimpleName();
private static final int MIN_FRAME_WIDTH = 580;
private static final int MIN_FRAME_HEIGHT = 580;
private static final int MAX_FRAME_WIDTH = 580;
private static final int MAX_FRAME_HEIGHT = 580;
private static CameraManager cameraManager;
static final int SDK_INT; // Later we can use Build.VERSION.SDK_INT
static {
int sdkInt;
try {
sdkInt = Integer.parseInt(Build.VERSION.SDK);
} catch (NumberFormatException nfe) {
// Just to be safe
sdkInt = 10000;
}
SDK_INT = sdkInt;
}
private final Context context;
private final CameraConfigurationManager configManager;
private Camera camera;
private Rect framingRect;
private Rect framingRectInPreview;
private boolean initialized;
private boolean previewing;
private final boolean useOneShotPreviewCallback;
/**
* Preview frames are delivered here, which we pass on to the registered handler. Make sure to
* clear the handler so it will only receive one message.
*/
private final PreviewCallback previewCallback;
/** Autofocus callbacks arrive here, and are dispatched to the Handler which requested them. */
private final AutoFocusCallback autoFocusCallback;
/**
* Initializes this static object with the Context of the calling Activity.
*
* @param context The Activity which wants to use the camera.
*/
public static void init(Context context) {
if (cameraManager == null) {
cameraManager = new CameraManager(context);
}
}
/**
* Gets the CameraManager singleton instance.
*
* @return A reference to the CameraManager singleton.
*/
public static CameraManager get() {
return cameraManager;
}
private CameraManager(Context context) {
this.context = context;
this.configManager = new CameraConfigurationManager(context);
// Camera.setOneShotPreviewCallback() has a race condition in Cupcake, so we use the older
// Camera.setPreviewCallback() on 1.5 and earlier. For Donut and later, we need to use
// the more efficient one shot callback, as the older one can swamp the system and cause it
// to run out of memory. We can't use SDK_INT because it was introduced in the Donut SDK.
//useOneShotPreviewCallback = Integer.parseInt(Build.VERSION.SDK) > Build.VERSION_CODES.CUPCAKE;
useOneShotPreviewCallback = Integer.parseInt(Build.VERSION.SDK) > 3; // 3 = Cupcake
previewCallback = new PreviewCallback(configManager, useOneShotPreviewCallback);
autoFocusCallback = new AutoFocusCallback();
}
/**
* Opens the camera driver and initializes the hardware parameters.
*
* @param holder The surface object which the camera will draw preview frames into.
* @throws IOException Indicates the camera driver failed to open.
*/
public void openDriver(SurfaceHolder holder) throws IOException {
if (camera == null) {
camera = Camera.open();
if (camera == null) {
throw new IOException();
}
camera.setPreviewDisplay(holder);
if (!initialized) {
initialized = true;
configManager.initFromCameraParameters(camera);
}
configManager.setDesiredCameraParameters(camera);
//FIXME
// SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
//�Ƿ�ʹ��ǰ��
// if (prefs.getBoolean(PreferencesActivity.KEY_FRONT_LIGHT, false)) {
// FlashlightManager.enableFlashlight();
// }
FlashlightManager.enableFlashlight();
}
}
/**
* Closes the camera driver if still in use.
*/
public void closeDriver() {
if (camera != null) {
FlashlightManager.disableFlashlight();
camera.release();
camera = null;
}
}
/**
* Asks the camera hardware to begin drawing preview frames to the screen.
*/
public void startPreview() {
if (camera != null && !previewing) {
camera.startPreview();
previewing = true;
}
}
/**
* Tells the camera to stop drawing preview frames.
*/
public void stopPreview() {
if (camera != null && previewing) {
if (!useOneShotPreviewCallback) {
camera.setPreviewCallback(null);
}
camera.stopPreview();
previewCallback.setHandler(null, 0);
autoFocusCallback.setHandler(null, 0);
previewing = false;
}
}
/**
* A single preview frame will be returned to the handler supplied. The data will arrive as byte[]
* in the message.obj field, with width and height encoded as message.arg1 and message.arg2,
* respectively.
*
* @param handler The handler to send the message to.
* @param message The what field of the message to be sent.
*/
public void requestPreviewFrame(Handler handler, int message) {
if (camera != null && previewing) {
previewCallback.setHandler(handler, message);
if (useOneShotPreviewCallback) {
camera.setOneShotPreviewCallback(previewCallback);
} else {
camera.setPreviewCallback(previewCallback);
}
}
}
/**
* Asks the camera hardware to perform an autofocus.
*
* @param handler The Handler to notify when the autofocus completes.
* @param message The message to deliver.
*/
public void requestAutoFocus(Handler handler, int message) {
if (camera != null && previewing) {
autoFocusCallback.setHandler(handler, message);
//Log.d(TAG, "Requesting auto-focus callback");
camera.autoFocus(autoFocusCallback);
}
}
/**
* Calculates the framing rect which the UI should draw to show the user where to place the
* barcode. This target helps with alignment as well as forces the user to hold the device
* far enough away to ensure the image will be in focus.
*
* @return The rectangle to draw on screen in window coordinates.
*/
public Rect getFramingRect() {
Point screenResolution = configManager.getScreenResolution();
if (framingRect == null) {
if (camera == null) {
return null;
}
int width = screenResolution.x * 3 / 4;
if (width < MIN_FRAME_WIDTH) {
width = MIN_FRAME_WIDTH;
} else if (width > MAX_FRAME_WIDTH) {
width = MAX_FRAME_WIDTH;
}
int height = screenResolution.y * 3 / 4;
if (height < MIN_FRAME_HEIGHT) {
height = MIN_FRAME_HEIGHT;
} else if (height > MAX_FRAME_HEIGHT) {
height = MAX_FRAME_HEIGHT;
}
int leftOffset = (screenResolution.x - width) / 2;
int topOffset = (screenResolution.y - height) / 2;
framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height);
Log.d(TAG, "Calculated framing rect: " + framingRect);
}
ret
没有合适的资源?快使用搜索试试~ 我知道了~
Android 基于google Zxing实现二维码的生成,识别和长按识别的效果
共91个文件
class:42个
java:21个
xml:7个
5星 · 超过95%的资源 需积分: 38 480 下载量 165 浏览量
2016-06-01
14:12:56
上传
评论 3
收藏 901KB RAR 举报
温馨提示
近项目用到了二维码的生成与识别,之前没有接触这块,然后就上网搜了搜,发现有好多这方面的资源,特别是google Zxing对二维码的封装,实现的已经不错了,可以直接拿过来引用,下载了他们的源码后,只做了少少的改动,就是在Demo中增加了长按识别的功能,网上虽然也有长按识别的Demo,但好多下载下来却无法运行,然后总结了一下,加在了下面的Demo中。
资源推荐
资源详情
资源评论
收起资源包目录
BarCodeTest.rar (91个子文件)
BarCodeTest
bin
classes.dex 449KB
res
crunch
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
ic_launcher.png 4KB
drawable-mdpi
ic_launcher.png 2KB
jarlist.cache 120B
BarCodeTest.apk 194KB
dexedLibs
annotations-44956b2fba09dac6d7d77f6c580d55f4.jar 910B
zxing-cd8d8da06be6a87d04bda0b250066996.jar 140KB
classes
com
zxing
camera
FlashlightManager.class 4KB
PreviewCallback.class 2KB
PlanarYUVLuminanceSource.class 3KB
AutoFocusCallback.class 2KB
CameraManager.class 6KB
CameraConfigurationManager.class 7KB
view
ViewfinderView.class 4KB
ViewfinderResultPointCallback.class 768B
activity
CaptureActivity.class 7KB
CaptureActivity$2.class 792B
CaptureActivity$1.class 838B
decoding
InactivityTimer.class 2KB
Intents$Share.class 476B
Intents.class 619B
Intents$SearchBookContents.class 583B
Intents$Scan.class 849B
Intents$Encode.class 604B
InactivityTimer$DaemonThreadFactory.class 907B
DecodeHandler.class 4KB
CaptureActivityHandler.class 4KB
FinishListener.class 1KB
DecodeThread.class 3KB
DecodeFormatManager.class 4KB
CaptureActivityHandler$State.class 1KB
Intents$WifiConnect.class 583B
encoding
EncodingHandler.class 2KB
ericssonlabs
BuildConfig.class 341B
R$layout.class 418B
BarCodeTestActivity.class 8KB
R$id.class 1KB
R$drawable.class 431B
BarCodeTestActivity$4$1.class 1KB
R$attr.class 334B
R.class 605B
BarCodeTestActivity$3.class 2KB
BarCodeTestActivity$2.class 846B
BarCodeTestActivity$1.class 1KB
RGBLuminanceSource.class 1KB
R$string.class 421B
R$color.class 1KB
BarCodeTestActivity$4.class 2KB
R$raw.class 419B
resources.ap_ 30KB
AndroidManifest.xml 2KB
res
drawable-ldpi
ic_launcher.png 2KB
raw
beep.ogg 12KB
realm_properties 49B
drawable-hdpi
ic_launcher.png 4KB
values
colors.xml 1KB
strings.xml 182B
ids.xml 1KB
drawable-mdpi
ic_launcher.png 3KB
navbar.9.png 3KB
layout
camera.xml 2KB
main.xml 2KB
assets
gen
com
ericssonlabs
BuildConfig.java 158B
R.java 4KB
proguard.cfg 1KB
.settings
org.eclipse.jdt.core.prefs 177B
src
com
zxing
camera
CameraManager.java 11KB
PlanarYUVLuminanceSource.java 4KB
FlashlightManager.java 5KB
CameraConfigurationManager.java 9KB
PreviewCallback.java 2KB
AutoFocusCallback.java 2KB
view
ViewfinderView.java 6KB
ViewfinderResultPointCallback.java 1KB
activity
CaptureActivity.java 6KB
decoding
Intents.java 6KB
DecodeHandler.java 4KB
InactivityTimer.java 2KB
FinishListener.java 1KB
CaptureActivityHandler.java 5KB
DecodeThread.java 2KB
DecodeFormatManager.java 4KB
encoding
EncodingHandler.java 1KB
ericssonlabs
RGBLuminanceSource.java 1KB
BarCodeTestActivity.java 9KB
.project 814B
.classpath 528B
project.properties 361B
AndroidManifest.xml 2KB
libs
zxing.jar 323KB
共 91 条
- 1
WheatHusks
- 粉丝: 27
- 资源: 28
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页