当前位置:首页 » 安卓系统 » android扫码源码

android扫码源码

发布时间: 2024-12-26 04:57:35

Ⅰ Android 二维码扫描怎样实现第二次重复扫描

扫描出现问题事弹出dialog,当用户点击确定按钮后重新开始扫描。 private void showErrorDialog() { closeCamera(); viewfinderView.setVisibility(View.GONE); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getString(R.string.app_name)); builder.setMessage("扫描确认出错,请重新扫描柜子上的二维码!"); builder.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { restartCamera(); } }); builder.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { CaptureCodeActivity.this.finish(); } }); builder.show(); }

Ⅱ androidapp二维码扫码下载,途牛网站的效果,怎么实现

Android 二维码扫描是很常用的工具,是不是很Cool,到底如何实现的呢,下面我们就来探讨一下Zxing的实现方法(底部附上下载链接):

首先

工程结构:

如何引用:(内容来自雪炭网SnowCoal.com)

一般来说,你就可以改改就用了,但如果你只想把它当成一个小小的子集加入项目,你需要将三个包Copy至你的项目中:(camera、decoding、view),然后引入相对应的资源进去,不要访记还有一个Jar包哦!(Zxing.jar)

关于布局:

com.example.qr_codescan包里面有一个MipcaActivityCapture,也是直接引入,这个Activity主要处理扫描界面的类,比如,扫描成功有声音和振动等等,主要关注里面的handleDecode(Result
result, Bitmap barcode)方法,扫描完成之后将扫描到的结果和二维码的bitmap当初参数传递到handleDecode(Result
result, Bitmap barcode)里面,我们只需要在里面写出相对应的处理代码即可,其他的地方都不用改得,这里处理扫描结果和扫描拍的照片.

* 处理扫描结果

* @param result

* @param barcode

*/

public void handleDecode(Result result, Bitmap barcode) {

inactivityTimer.onActivity();

playBeepSoundAndVibrate();

String resultString = result.getText();

if (resultString.equals( "" )) {

Toast.makeText(MipcaActivityCapture. this , "Scan failed!" ,
Toast.LENGTH_SHORT).show();

} else {

Intent resultIntent = new Intent();

Bundle bundle = new Bundle();

bundle.putString( "result" , resultString);

bundle.putParcelable( "bitmap" , barcode);

resultIntent.putExtras(bundle);

this .setResult(RESULT_OK, resultIntent);

}

MipcaActivityCapture. this .finish();

}

对MipcaActivityCapture界面的布局做了自己的改动,先看下效果图,主要是用到FrameLayout,里面嵌套RelativeLayout。

//xml

android:layout_width= "fill_parent"

android:layout_height= "fill_parent" >

android:layout_width= "fill_parent"

android:layout_height= "fill_parent" >

android:id= "@+id/preview_view"

android:layout_width= "fill_parent"

android:layout_height= "fill_parent"

android:layout_gravity= "center" />

android:id= "@+id/viewfinder_view"

android:layout_width= "wrap_content"

android:layout_height= "wrap_content" />

< include

android:id= "@+id/include1"

android:layout_width= "fill_parent"

android:layout_height= "wrap_content"

android:layout_alignParentTop= "true"

layout= "@layout/activity_title" />

实现:

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

public class MainActivity extends Activity {

private final static int SCANNIN_GREQUEST_CODE = 1 ;

/**

* 显示扫描结果

*/

private TextView mTextView ;

/**

* 显示扫描拍的图片

*/

private ImageView mImageView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super .onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTextView = (TextView) findViewById(R.id.result);

mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);

//点击按钮跳转到二维码扫描界面,这里用的是startActivityForResult跳转

//扫描完了之后调到该界面

Button mButton = (Button) findViewById(R.id.button1);

mButton.setOnClickListener( new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

intent.setClass(MainActivity. this , MipcaActivityCapture. class );

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivityForResult(intent, SCANNIN_GREQUEST_CODE);

}

});

}

@Override

protected void onActivityResult( int requestCode, int resultCode, Intent
data) {

super .onActivityResult(requestCode, resultCode, data);

switch (requestCode) {

case SCANNIN_GREQUEST_CODE:

if (resultCode == RESULT_OK){

Bundle bundle = data.getExtras();

//显示扫描到的内容

mTextView.setText(bundle.getString( "result" ));

//显示

mImageView.setImageBitmap((Bitmap) data.getParcelableExtra( "bitmap"
));

}

break ;

}

}

}

Ⅲ Android 我用zxing开发二维码扫描 为什么只能扫描一次

二维码里面存储的都是文本,只不过有些二维码在生成的时候加了点儿格式而已,你可以在网上随便找两个在线生成二维码的,然后生成二维码,用你自己的项目扫描,你就可以看出这些格式了,然后在你的扫描结果上进行判断,

Ⅳ 扫码登录的原理

原理如下:

每次用户打开PC端登录请求,系统返回一个唯一的uid,并将uid的信息绘制成二维码返回给用喊樱带户。这里的uid一定是唯一的,否则就会造成你登录了其他用户的账号或者其他用户登录你的账号。

当用户使用登录后的微信扫描该二维码的时候,会将这个uid和手机郑芦上的微信账号及密码产生的token进行绑定,并上传到服务器。

二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形。

在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有颂谈其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

Ⅳ Android 二维码扫描怎样实现第二次扫描

首先看一下扫描界面

CaptureCodeActivity.java代码:

packagecom.haier.qr.code;

importjava.io.IOException;
importjava.io.Serializable;
importjava.util.Map;
importjava.util.Vector;

importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.content.DialogInterface;
importandroid.content.DialogInterface.OnCancelListener;
importandroid.content.DialogInterface.OnClickListener;
importandroid.content.Intent;
importandroid.graphics.Bitmap;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.text.TextUtils;
importandroid.util.Log;
importandroid.view.SurfaceHolder;
importandroid.view.SurfaceHolder.Callback;
importandroid.view.SurfaceView;
importandroid.view.View;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.widget.Toast;

importcom.google.zxing.BarcodeFormat;
importcom.google.zxing.DecodeHintType;
importcom.google.zxing.Result;
importcom.haier.cabinet.customer.R;
importcom.haier.cabinet.customer.activity.DeliveryBoxListActivity;
importcom.haier.common.util.AppToast;
importcom.haier.qr.code.zxing.camera.CameraManager;
importcom.haier.qr.code.zxing.decoding.CaptureActivityHandler;
importcom.haier.qr.code.zxing.decoding.FinishListener;
importcom.haier.qr.code.zxing.decoding.InactivityTimer;
importcom.haier.qr.code.zxing.view.ViewfinderView;

/**
*Initialthecamera
*
*@authorjdsjlzx
*/
,View.OnClickListener{

privatestaticfinalStringTAG=CaptureCodeActivity.class
.getSimpleName();

;
;
;
privatebooleanhasSurface;
privateMap<DecodeHintType,?>decodeHints;
privateVector<BarcodeFormat>decodeFormats;
privateStringcharacterSet;
;
;
/**
*声音震动管理器。如果扫描成功后可以播放一段音频,也可以震动提醒,可以通过配置来决定扫描成功后的行为。
*/
privateBeepManagerbeepManager;

/**
*闪光灯调节器。自动检测环境光线强弱并决定是否开启闪光灯
*/
;

(){
returncameraManager;
}

/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
Windowwindow=getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_capture);

hasSurface=false;
inactivityTimer=newInactivityTimer(this);

beepManager=newBeepManager(this);
ambientLightManager=newAmbientLightManager(this);

//按钮监听事件
findViewById(R.id.capture_flashlight).setOnClickListener(this);
}

@Override
protectedvoidonResume(){
super.onResume();
Log.d(TAG,"onResume");
cameraManager=newCameraManager(getApplication());
viewfinderView=(ViewfinderView)findViewById(R.id.viewfinder_view);
viewfinderView.setCameraManager(cameraManager);
viewfinderView.setVisibility(View.VISIBLE);

SurfaceViewsurfaceView=(SurfaceView)findViewById(R.id.preview_view);
SurfaceHoldersurfaceHolder=surfaceView.getHolder();
if(hasSurface){
initCamera(surfaceHolder);
}else{
//防止sdk8的设备初始化预览异常
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

//()toinitthe
//camera.
surfaceHolder.addCallback(this);
}
decodeFormats=null;
characterSet=null;

//加载声音配置,其实在BeemManager的构造器中也会调用该方法,即在onCreate的时候会调用一次
beepManager.updatePrefs();

//启动闪光灯调节器
ambientLightManager.start(cameraManager);

//恢复活动监控器
inactivityTimer.onResume();


}


@Override
protectedvoidonPause(){
Log.d(TAG,"onPause");
if(handler!=null){
handler.quitSynchronously();
handler=null;
}
inactivityTimer.onPause();
ambientLightManager.stop();
beepManager.close();

//关闭摄像头
cameraManager.closeDriver();
if(!hasSurface){
SurfaceViewsurfaceView=(SurfaceView)findViewById(R.id.preview_view);
SurfaceHoldersurfaceHolder=surfaceView.getHolder();
surfaceHolder.removeCallback(this);
}
super.onPause();
}

@Override
protectedvoidonDestroy(){
inactivityTimer.shutdown();
super.onDestroy();
}

/**
*Avalidbarcodehasbeenfound,
*theresults.
*
*@paramrawResult
*Thecontentsofthebarcode.
*@paramscaleFactor
*
*@parambarcode
*.
*/
publicvoidhandleDecode(ResultrawResult,Bitmapbarcode,floatscaleFactor){
Log.d(TAG,"handleDecode");
inactivityTimer.onActivity();

beepManager.playBeepSoundAndVibrate();

StringresultString=rawResult.getText();
if(TextUtils.isEmpty(resultString)){
Toast.makeText(CaptureCodeActivity.this,"Scanfailed!",
Toast.LENGTH_SHORT).show();
}else{
//扫码完成,处理结果(跳转到箱子列表)
/*IntentresultIntent=newIntent();
Bundlebundle=newBundle();
bundle.putString("result",resultString);
bundle.putParcelable("bitmap",barcode);
resultIntent.putExtras(bundle);
this.setResult(RESULT_OK,resultIntent);*/
StringterminalNo=getIntent().getStringExtra("terminal_no");
if(resultString.equals(terminalNo)){
AppToast.makeToast(this,"确认成功!");
Intentintent=newIntent(this,DeliveryBoxListActivity.class);
intent.putExtra("terminal_no",terminalNo);
intent.putExtra("box_list",(Serializable)getIntent().getSerializableExtra("box_list"));
startActivity(intent);
CaptureCodeActivity.this.finish();
}else{
/*AppToast.makeToast(this,"确认失败,请重新扫描确认");*/
showErrorDialog();
}

}

}

privatevoidinitCamera(SurfaceHoldersurfaceHolder){
if(surfaceHolder==null){
thrownewIllegalStateException("NoSurfaceHolderprovided");
}
if(cameraManager.isOpen()){
Log.w(TAG,
"initCamera()whilealreadyopen--lateSurfaceViewcallback?");
return;
}
try{
cameraManager.openDriver(surfaceHolder);
//,whichcanalsothrowa
//RuntimeException.
if(handler==null){
handler=newCaptureActivityHandler(this,decodeFormats,
decodeHints,characterSet,cameraManager);
}

}catch(IOExceptionioe){
Log.w(TAG,ioe);
();
}catch(RuntimeExceptione){
//:
//java.?lang.?RuntimeException:Failtoconnecttocameraservice
Log.w(TAG,"",e);
();
}
}

privatevoid(){
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setTitle(getString(R.string.app_name));
builder.setMessage(getString(R.string.msg_camera_framework_bug));
builder.setPositiveButton(android.R.string.yes,newFinishListener(this));
builder.setOnCancelListener(newFinishListener(this));
builder.show();
}

@Override
publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
intheight){

}

@Override
publicvoidsurfaceCreated(SurfaceHolderholder){
if(holder==null){
Log.e(TAG,
"***WARNING***surfaceCreated()gaveusanullsurface!");
}
if(!hasSurface){
hasSurface=true;
initCamera(holder);
}

}

@Override
publicvoidsurfaceDestroyed(SurfaceHolderholder){
hasSurface=false;

}

(){
returnviewfinderView;
}

publicHandlergetHandler(){
returnhandler;
}

publicvoiddrawViewfinder(){
viewfinderView.drawViewfinder();

}

@Override
publicvoidonClick(Viewv){
switch(v.getId()){

caseR.id.capture_flashlight:
if(isFlashlightOpen){
cameraManager.setTorch(false);//关闭闪光灯
isFlashlightOpen=false;
}
else{
cameraManager.setTorch(true);//打开闪光灯
isFlashlightOpen=true;
}
break;
default:
break;
}
}

privatevoidshowErrorDialog(){
closeCamera();
viewfinderView.setVisibility(View.GONE);
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setTitle(getString(R.string.app_name));
builder.setMessage("扫描确认出错,请重新扫描二维码!");
builder.setPositiveButton(android.R.string.ok,newOnClickListener(){

@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
restartCamera();
}
});
builder.setOnCancelListener(newOnCancelListener(){

@Override
publicvoidonCancel(DialogInterfacedialog){
CaptureCodeActivity.this.finish();
}
});
builder.show();
}

voidrestartCamera(){
Log.d(TAG,"hasSurface"+hasSurface);

viewfinderView.setVisibility(View.VISIBLE);

SurfaceViewsurfaceView=(SurfaceView)findViewById(R.id.preview_view);
SurfaceHoldersurfaceHolder=surfaceView.getHolder();
initCamera(surfaceHolder);

//恢复活动监控器
inactivityTimer.onResume();
}

voidcloseCamera(){
if(handler!=null){
handler.quitSynchronously();
handler=null;
}
inactivityTimer.onPause();

//关闭摄像头
cameraManager.closeDriver();
}

}

在扫描出现问题事弹出dialog,当用户点击确定按钮后重新开始扫描。


privatevoidshowErrorDialog(){
closeCamera();
viewfinderView.setVisibility(View.GONE);
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setTitle(getString(R.string.app_name));
builder.setMessage("扫描确认出错,请重新扫描柜子上的二维码!");
builder.setPositiveButton(android.R.string.ok,newOnClickListener(){

@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
restartCamera();
}
});
builder.setOnCancelListener(newOnCancelListener(){

@Override
publicvoidonCancel(DialogInterfacedialog){
CaptureCodeActivity.this.finish();
}
});
builder.show();
}
热点内容
中央编译出版社高校指定出版社 发布:2024-12-26 17:11:14 浏览:924
iphonexr和安卓哪个打游戏好 发布:2024-12-26 17:09:37 浏览:33
安卓朋友圈如何发纯文字 发布:2024-12-26 17:09:27 浏览:76
诊所配置哪些检查设备 发布:2024-12-26 17:07:16 浏览:540
数据库一对一关系 发布:2024-12-26 17:07:10 浏览:901
三星手机的数字密码哪里修改 发布:2024-12-26 17:04:04 浏览:459
怎么修改支付宝指纹密码 发布:2024-12-26 16:52:27 浏览:554
用平板学编程 发布:2024-12-26 16:42:50 浏览:554
压缩空气盾构 发布:2024-12-26 16:38:42 浏览:461
编程期刊 发布:2024-12-26 16:35:18 浏览:712