當前位置:首頁 » 安卓系統 » android掃描二維碼源碼

android掃描二維碼源碼

發布時間: 2023-07-12 07:17:59

① Android 小黃車掃描二維碼用的啥框架

這里簡單介紹一下ZXing庫。ZXing是一個開放源碼的,用java實現的多種格式的1D/2D條碼圖像處理庫,它包含了聯繫到其他語言的埠。Zxing可以實現使用手機的內置的攝像頭完成條形碼的掃描及解碼。該項目可實現的條形碼編碼和解碼。目前支持以下格式:UPC-A,UPC-E、EAN-8,EAN-13、39碼、93碼。ZXing是個很經典的條碼/二維碼識別的開源類庫,以前在功能機上,就有開發者使用J2ME運用ZXing了,不過要支持JSR-234規范(自動對焦)的手機才能發揮其威力。
下面是ZXing的demo運行,我這里創建了一個二維碼,內容是我博客的網址,大夥可以用微信的掃一掃功能,試一下。就可以直接打開我博客。

② 如何使用android studio開發掃描二維碼程序

我們項目的前提是你已經將基本的運行環境及sdk都已經安裝好了,讀者可自行網路環境配置相關內容,本文不再贅述。右鍵點擊new-->Mole,Mole相當於新建了一個項目。如圖所示

選擇Android Application,點擊next

將My Mole 和app改成自己項目相應的名字,同時選擇支持的Android版本

這一步我們選擇Blank Activity,自己手動編寫登錄界面,而不依賴系統內置的Login Activity,一直點擊next,最後點擊finish就完成了項目的創建

在project下我們可以看到出現了我們剛才創建的login項目

展開res/layout,點擊打開activity_main.xml文件,在這個文件里我們將完成登錄界面的編寫

這是初始的主界面,還沒有經過我們編寫的界面,Android Studio有一個很強大的預覽功能,相當給力

我們將activity_main.xml的代碼替換成如下代碼:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:stretchColumns="0,3">
<TableRow>
<TextView />
<TextView
android:text="賬 號:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24px"
/>
<EditText
android:id="@+id/account"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24px"
android:minWidth="220px"/>
<TextView />
</TableRow>
<TableRow android:layout_marginTop="20px">
<TextView />
<TextView
android:text="密 碼:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

/>
<EditText
android:id="@+id/pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="220px"
android:textSize="24px"
android:inputType="textPassword"/>
<TextView />
</TableRow>
<TableRow android:layout_marginTop="20px">
<TextView />
<Button
android:id="@+id/login"
android:text="登錄"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/quit"
android:text="退出"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView />
</TableRow>
</TableLayout>

③ 掃描二維碼的zing-2.3.0源碼中,部分語句在Android-17中棄用了

//ctrl+1添加@SuppressWarnings("deprecation")在onResume
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB){
surfaceHolder.setType(surfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

//Integer.parseInt(Build.VERSION.SDK)改為Build.VERSION.SDK_INT

//YCbCr_420_SP用ImageFormat.NV21代替
//YCbCr_422_SP用ImageFormat.NV16代替

//這些文檔上都有,自己都可以解決的……

④ 在android中使用googlezxing實現二維碼

先打開本地下載,復制文件,拷貝到他們的項目中即可。
首先我們打開google的zxing的地址,googledezxing地址(本地下載),打開之後我們會看到界面,將這個文件下載我們本地,下載好之後我們需要復制android文件下的幾個類,根據這些類名稱在android文件下找到這些類,拷貝到他們的項目中,拷貝之後會有報錯,我們需要將android文件下的res中的文件也拷貝到我們的項目中。完成之後我們還要依賴zxing的核心類庫,當我們的項目不報錯的時候,就可以先實現掃描二維碼和生成二維碼。

⑤ android掃描二維碼怎麼實現鏈接源碼

這有個zxing二維碼開發demo的源代碼,你看看吧

⑥ android開發 如何實現掃描本地二維碼圖片

開源的二維碼掃描庫主要有zxing和zbar,zbar在iPos平台上應用比較成熟,而在Android平台上主流還是用zxing庫,因此這里主要講述如何利用zxing進行二維碼開發。

  • 如何將zxing的Android源碼導入工程。

    • 在導入zxing的android源碼之前,先去官方下載zxing的源碼http://code.google.com/p/zxing/downloads/list。

    • 這里以1.6版本為例,zxing 1.6源碼結構如下:


      <?xmlversion="1.0"encoding="utf-8"?>
      <manifestxmlns:android="http://schemas.android.com/apk/res/android"
      package="com.qrcode"
      android:versionCode="1"
      android:versionName="1.0">
      <uses-sdkandroid:minSdkVersion="7"/>

      <uses-permissionandroid:name="android.permission.VIBRATE"/><!--震動許可權-->
      <uses-permissionandroid:name="android.permission.CAMERA"/>
      <uses-featureandroid:name="android.hardware.camera"/><!--使用照相機許可權-->
      <uses-featureandroid:name="android.hardware.camera.autofocus"/><!--自動聚焦許可權-->
      <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
      <activityandroid:name=".MainActivity"
      android:label="@string/app_name">
      <intent-filter>
      <actionandroid:name="android.intent.action.MAIN"/>
      <categoryandroid:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
      </activity>

      <!--隱藏鍵盤--><!--全屏-->
      <activity
      android:configChanges="orientation|keyboardHidden"
      android:name="com.zxing.activity.CaptureActivity"
      android:screenOrientation="portrait"
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
      android:windowSoftInputMode="stateAlwaysHidden">
      </activity>
      </application>
      </manifest>

    • 這種情況大致就可以實現二維碼掃描了,想細化的話,還可以多看看安卓二維碼掃描開發相關的教程

⑦ 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 二維碼掃描怎樣實現第二次掃描

首先看一下掃描界面

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();
}
熱點內容
x2哪個配置性價比高 發布:2025-02-06 00:40:12 瀏覽:109
豬哥亮訪問張菲 發布:2025-02-06 00:37:52 瀏覽:570
期貨賬戶怎麼改密碼 發布:2025-02-06 00:32:35 瀏覽:279
qq自動上傳群文件 發布:2025-02-06 00:26:25 瀏覽:110
安卓照片放在什麼地方 發布:2025-02-06 00:26:24 瀏覽:988
linux系統鏡像iso 發布:2025-02-06 00:15:39 瀏覽:188
存儲上料模塊的意義 發布:2025-02-06 00:14:14 瀏覽:125
unix時間戳轉換php 發布:2025-02-06 00:13:27 瀏覽:404
我的世界網易電腦板好玩的槍械rpg伺服器 發布:2025-02-06 00:08:04 瀏覽:346
非揮發性記憶體永久性存儲器 發布:2025-02-06 00:07:17 瀏覽:267