/*
* 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.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 = 500;
private static final int MIN_FRAME_HEIGHT = 500;
private static final int MAX_FRAME_WIDTH = 700;
private static final int MAX_FRAME_HEIGHT = 700;
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);
}
return framingRect;
}
/**
* Like {@link #getFramingRect} but coordinates are in terms
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Zxing 在Fragment中实现二维码扫描 (195个子文件)
resources.ap_ 31KB
resources.ap_ 29KB
BarCodeTestFragment.apk 462KB
BarCodeTest.apk 192KB
BarCodeTest.apk 190KB
jarlist.cache 120B
jarlist.cache 120B
proguard.cfg 1KB
proguard.cfg 1KB
CaptureFragment.class 8KB
CaptureActivity.class 8KB
CameraConfigurationManager.class 7KB
CameraConfigurationManager.class 7KB
CaptureActivity.class 7KB
CameraManager.class 6KB
CameraManager.class 6KB
FlashlightManager.class 4KB
FlashlightManager.class 4KB
ViewfinderView.class 4KB
ViewfinderView.class 4KB
CaptureActivityHandler.class 4KB
CaptureActivityHandler.class 4KB
DecodeHandler.class 4KB
DecodeHandler.class 4KB
DecodeFormatManager.class 4KB
DecodeFormatManager.class 4KB
PlanarYUVLuminanceSource.class 3KB
PlanarYUVLuminanceSource.class 3KB
DecodeThread.class 3KB
DecodeThread.class 3KB
BarCodeTestActivity.class 2KB
BarCodeTestActivity.class 2KB
EncodingHandler.class 2KB
EncodingHandler.class 2KB
PreviewCallback.class 2KB
PreviewCallback.class 2KB
BarCodeTestActivity$2.class 2KB
BarCodeTestActivity$3.class 2KB
InactivityTimer.class 2KB
InactivityTimer.class 2KB
ShowFragmentActivity.class 2KB
AutoFocusCallback.class 2KB
AutoFocusCallback.class 2KB
R$color.class 1KB
R$color.class 1KB
ShowFragmentActivity$MyBrodcast.class 1KB
CaptureActivityHandler$State.class 1KB
CaptureActivityHandler$State.class 1KB
R$id.class 1KB
R$id.class 1KB
FinishListener.class 1KB
FinishListener.class 1KB
BarCodeTestActivity$1.class 1KB
BarCodeTestActivity$2.class 1KB
BarCodeTestActivity$1.class 1018B
InactivityTimer$DaemonThreadFactory.class 907B
InactivityTimer$DaemonThreadFactory.class 907B
Intents$Scan.class 849B
Intents$Scan.class 849B
CaptureActivity$1.class 838B
CaptureFragment$1.class 838B
CaptureActivity$1.class 838B
CaptureActivity$2.class 792B
CaptureActivity$2.class 792B
ViewfinderResultPointCallback.class 768B
ViewfinderResultPointCallback.class 768B
CaptureFragment$2.class 762B
Intents.class 619B
Intents.class 619B
R.class 605B
R.class 605B
Intents$Encode.class 604B
Intents$Encode.class 604B
Intents$WifiConnect.class 583B
Intents$SearchBookContents.class 583B
Intents$WifiConnect.class 583B
Intents$SearchBookContents.class 583B
DecodeHandlerInterface.class 535B
R$layout.class 494B
Intents$Share.class 476B
Intents$Share.class 476B
R$drawable.class 431B
R$drawable.class 431B
R$string.class 421B
R$string.class 421B
R$raw.class 419B
R$raw.class 419B
R$layout.class 418B
BuildConfig.class 341B
BuildConfig.class 341B
R$attr.class 334B
R$attr.class 334B
.classpath 594B
.classpath 528B
classes.dex 1.8MB
classes.dex 442KB
android-support-v4.jar 741KB
zxing.jar 323KB
zxing.jar 323KB
android-support-v4-91223fef0563e5338f43cf5d9c5ea8ec.jar 267KB
共 195 条
- 1
- 2
啤丶酒
- 粉丝: 30
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 第4章 手机平板要兼顾-探究碎片.pdf
- 字节跳动DeepSeek多模态AI模型在NLP任务中的强大能力及其广泛商业应用
- 全面解析GitHub高级搜索功能及实用技巧
- Java基于springboot的物业管理系统项目源码+数据库(高分毕设项目).zip
- 深度解析卷积神经网络(CNN)基本结构与广泛应用领域
- 基于SpringBoot+vue的足球社区管理系统.zip
- 算法领域:高效快速排序的技术解析及其Python实现
- 风储系统,风电场功率调节优化控制,使用模型预测控制策略,可以做成4个风电场之间的功率调节,也可以针对单个风电场中风机的分配
- .基于javaweb的仓库管理系统.zip
- 文件读取失败异常解决办法.md
- 基于Springboot+Vue医疗挂号管理系统-毕业源码案例设计(源码+数据库).zip
- 基于Springboot+Vue医院管理系统毕业源码案例设计(高分项目).zip
- 基于Springboot+Vue疫苗发布和接种预约系统-毕业源码案例设计(高分项目).zip
- 详解MySQL时区设置方法及注意事项
- 风-储系统仿真模型;通过模糊逻辑控制策略驱动蓄电池变器运行,以达到为电网提供惯量的目的 可以实现功率平滑输出
- 基于Springboot+Vue校园外卖服务系统设计与实现-毕业源码案例设计(高分项目).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页