導航:首頁 > 編程語言 > android二維碼編程

android二維碼編程

發布時間:2023-02-06 07:50:55

1. android怎麼實現二維碼掃描完成以後返回結果自動進入下一次的掃描

網路,谷歌都行,自己搜一下就知道了,很簡單的吧,循環掃描不就行了,有結果就新開進程返回,編程的,得學會使用網路和谷歌啊,很多問題都能找到解決辦法的,網上現成的代碼

2. android怎樣生成條碼和二維碼

一、問題描述 在開發中需要將信息轉換為二維碼存儲並要求帶有公司的logo,我們知道Google的Zxing開源項目就很好的幫助我們實現條形碼、二維碼的生成和解析,但帶有logo的官網並沒有提供demo,下面就通過實例看看如何實現以及Zxing的使用。 二、案例介紹 1、案例運行效果 2、案例准備工作 在項目中加入jar,只需加入core/zxing/zxing/ 三、Zxing主要組件 1、BarcodeFormat 定義了不同的二進制編碼方式,取值如下 EAN_13條形碼,共計13位代碼,比較常見,如商品上的包裝上的都是這種條形碼 CODE_QR二維碼(矩陣碼),比條形碼存在更多信息,當下比較流行 CODE_128條形碼 可表示可表示從 ASCII 0 到ASCII 127 共128個字元,用於企業管理,生產流程式控制制 CODE_39條形碼,編制簡單只接受如下43個字元 2、MultiFormatWriter 主要包含一個 encode()方法,可實現產生編碼(條形、二維碼) BitMatrix encode(String contents, BarcodeFormat format, int width, int height,Hashtable hints)方法 參數: contents:要編碼的內容 format:編碼格式(條形、二維) width,height:生成碼的大小 hints:包含EncodeHintType(編碼提示類型)信息的集合,主要設置字元編碼,比如支持漢字的utf-8,如下: Hashtable hst = new Hashtable(); hst.put(EncodeHintType.CHARACTER_SET, “UTF-8″); 返回值:BitMatrix 二維矩陣點 3、BitMatrix BitMatrix :表現為一個二維矩陣,x表示列的位置,y表示行的位置,循序從左上角開始,一列一列排列(先x後y) 主要方法: getWidth():返回矩陣的寬度 getHeight():返回矩陣的高度 boolean get(x,y) :非常重要的方法,實現根據給定的x,y判斷該位置是否有黑塊 在產生二維碼的應用中就是通過這個方法進行判斷,然後把有黑塊的點記錄下來,使用Bitmap的setPixels()方法生成圖形,詳解案例的createCode()方法中的代碼 四、完整代碼 public class MainActivity extends Activity { private EditText etCompany; private EditText etPhone; private EditText etEmail; private EditText etWeb; private Bitmap logo; private static final int IMAGE_HALFWIDTH = 40;//寬度值,影響中間圖片大小 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲得資源圖片,可改成獲取本地圖片或拍照獲取圖片 logo=BitmapFactory.decodeResource(super.getResources(),R.drawable.y014); etCompany =(EditText) findViewById(R.id.etCompany); etPhone=(EditText) findViewById(R.id.etPhone); etEmail =(EditText) findViewById(R.id.etEmail); etWeb =(EditText) findViewById(R.id.etWeb); findViewById(R.id.but).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String company=etCompany.getText().toString().trim() ; String phone =etPhone .getText().toString().trim() ; String email = etEmail.getText().toString().trim() ; String web = etWeb.getText().toString().trim() ; //二維碼中包含的文本信息 String contents= "BEGIN:VCARD/nVERSION:3.0/nORG:"+company+"/nTEL:"+phone+"/nURL:"+web+"/nEMAIL:"+email+"/nEND:VCARD"; try { //調用方法createCode生成二維碼 Bitmap bm=createCode(contents,logo,BarcodeFormat.QR_CODE); ImageView img=(ImageView)findViewById(R.id.imgCode) ; //將二維碼在界面中顯示 img.setImageBitmap(bm); } catch (WriterException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } /** * 生成二維碼 * @param string 二維碼中包含的文本信息 * @param mBitmap logo圖片 * @param format 編碼格式 * @return Bitmap 點陣圖 * @throws WriterException */ public Bitmap createCode(String string,Bitmap mBitmap, BarcodeFormat format) throws WriterException { Matrix m = new Matrix(); float sx = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getWidth(); float sy = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getHeight(); m.setScale(sx, sy);//設置縮放信息 //將logo圖片按martix設置的信息縮放 mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), m, false); MultiFormatWriter writer = new MultiFormatWriter(); Hashtable hst = new Hashtable(); hst.put(EncodeHintType.CHARACTER_SET, "UTF-8");//設置字元編碼 BitMatrix matrix = writer.encode(string, format, 400, 400, hst);//生成二維碼矩陣信息 int width = matrix.getWidth();//矩陣高度 int height = matrix.getHeight();//矩陣寬度 int halfW = width / 2; int halfH = height / 2; int[] pixels = new int[width * height];//定義數組長度為矩陣高度*矩陣寬度,用於記錄矩陣中像素信息 for (int y = 0; y < height; y++) {//從行開始迭代矩陣 for (int x = 0; x < width; x++) {//迭代列 if (x > halfW - IMAGE_HALFWIDTH && x < halfW + IMAGE_HALFWIDTH && y > halfH - IMAGE_HALFWIDTH && y < halfH + IMAGE_HALFWIDTH) {//該位置用於存放圖片信息 //記錄圖片每個像素信息 pixels[y * width + x] = mBitmap.getPixel(x - halfW + IMAGE_HALFWIDTH, y - halfH + IMAGE_HALFWIDTH); } else { if (matrix.get(x, y)) {//如果有黑塊點,記錄信息 pixels[y * width + x] = 0xff000000;//記錄黑塊信息 } } } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); // 通過像素數組生成bitmap bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } }

3. 如何使用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>

4. 在android中使用googlezxing實現二維碼

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

5. Android 二維碼掃描開發(大神進……)

camera.release()

6. android開發如何實現掃描某個設備上的二維碼下載應用,然後在該應用中掃描該二維碼實現對該設備的操作

APP通過掃描得到的二維碼信息來判斷接下來要幹嘛,
每一個二維碼里都有自己的信息(唯一的,信息不同二維碼也不同),,比如連接,掃二維碼下載原理是先掃描到的下載連接,然後通過連接下載APP,當然這個鏈接也可以是一個網頁,並且在網頁上顯示我們看到的車的信息又或者車的信息直接存在了二維碼里並通過APP直接顯示出來

7. Android ZXing 二維碼,編碼和解碼的演算法是什麼演算法,還是用bitmap生成二維碼圖片那個演算法是什麼,謝謝

二維碼分兩類:行排式二維條碼和矩陣式二維碼,已矩陣式二維碼中QRcode為例。
QRcode是日本Denso公司開發的,目前網上有其二維碼信息組件QRcode.dll,該組件可對輸入的字元串進行QR編碼
調用介面定義:
STDMETHOD
IMPCQREncoder:Encode(BSTR bstrEncodeData,
BYTE byErrorCorrectionLevel,
BOOL bISOI2EC,
BSTR *pbstrResultStream)
輸入參數說明:
BSTR bstrEncodeData: 待編碼的字元串,注意一個中文字元對應兩個位元組,對應漢字內碼
BYTE byErrorCorrectionLevel:編碼的糾錯級別選擇,0表示糾錯級別L(7%),1表示糾錯級別M(15%),2表示糾錯級別Q(25%),3表示糾錯級別H(30%)
BOOL bISOIEC:採用的編碼標准,取值為TRUE表示採用國際標准(ISO/IEC18004),FALSE表示采國家標准(GB/TGB/T18284-2000)
輸出參數說明:
BSTR *pbstrResultStream:輸出字元串,字元串由三部分組成,(注意,每個字元為一個位元組)
第一部分三位元組,為編碼後QR符號的寬度,
第二部分三位元組,為編碼後QR符號的高度,
第三部分為編碼後的QR符號,長度為QR符號寬度與QR符號高度的乘積。
舉個例子,對字元串「01234567」
編碼後得到返回值為:
「011011111111101001100100010」
字元串「01234567」經二維碼信息編碼後應理解為:
21個單位寬(前三個字元『021』)、21個單位高的正方形單位矩陣,
可以根據矩陣中的每一個元素值(0或1)來生成二維碼圖片對應位置上的像素顏色,假設定0值為白色,1值為黑色,每個單位(即021後面的字元)表示1個像素,那麼當前二維碼圖片應為21像素寬、21像素高的黑白相間的圖片。我想用編碼後的信息,以這種定義生成圖片的演算法應該還是容易實現的。另外,QR編碼具體演算法,建議還是看看QR編碼規範文檔,如果你需要,我可以傳給你。

8. android如何將一個字元串生成二維碼

二維碼應用有一個很有名的開源項目ZXing。從它的官網下載Demo,我們需要的是~\ZXingDemo\libs\zxing.jar,這是ZXing的庫,開始!
首先是AndroidMainfest.xml,要注冊activity:
<activity android:name="com.cleaderwin.home.dp." />

還要有相關操作許可權:
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
</uses-permission>
<uses-permission android:name="android.permission.CAMERA" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>

然後是.xml:
<ImageView
android:id="@+id/imageView"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"/>

剩下VideoActivity:
import java.util.Hashtable;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

public class VideoActivity extends Activity {
private int QR_WIDTH;
private int QR_HEIGHT;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
createQRImage("http://www..com");
}
}

// 要轉換的地址或字元串,可以是中文
public void createQRImage(String url) {
ImageView img = (ImageView)findViewById(R.id.imageView);
QR_WIDTH = 300;
QR_HEIGHT = 300;
// 判斷URL合法性
if (url == null || "".equals(url) || url.length() < 1) {
return;
}
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// 圖像數據轉換,使用了矩陣轉換
BitMatrix bitMatrix = null;
try {
bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
} catch (WriterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
// 下面這里按照二維碼的演算法,逐個生成二維碼的圖片,
// 兩個for循環是圖片橫列掃描的結果
for (int y = 0; y < QR_HEIGHT; y++) {
for (int x = 0; x < QR_WIDTH; x++) {
if (bitMatrix.get(x, y)) {
pixels[y * QR_WIDTH + x] = 0xff000000;
} else {
pixels[y * QR_WIDTH + x] = 0xffffffff;
}
}
}
// 生成二維碼圖片的格式,使用ARGB_8888
Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
// 顯示到一個ImageView上面
img.setImageBitmap(bitmap);
}
}

9. Android實現二維碼掃描功能

1.//依賴注入

2.根據生命周期來對業務邏輯進行處理

1.布局的聲明

2.Activity生命周期來處理業務邏輯

3.手機震動方法處理(在掃描成功的方法中調用此方法就可以了)

private void vibrate() {

Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);

    vibrator.vibrate(200);

}

10. Android二維碼識別源碼,可有多種實現方式

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

2、ZXing庫主要類
下面給大家介紹一下,ZXing庫裡面主要的類以及這些類的作用:
CaptureActivity。這個是啟動Activity 也就是掃描器。
CaptureActivityHandler 解碼處理類,負責調用另外的線程進行解碼。
DecodeThread 解碼的線程。
com.google.zxing.client.android.camera 包,攝像頭控制包。
ViewfinderView 自定義的View,就是我們看見的拍攝時中間的框框了。

3、使用ZXing生成二維碼
下面針對二維碼生成和解析做個簡單介紹,至於詳細的使用方法,建議大家還是自己看看源碼,使用起來很簡單,不過這個開源項目的代碼,值得好好看看。首先給出二維碼生成的方法:
View Code
上面就是二維碼生成的方法介面,如果你只是使用者方法,很簡單,只要傳入一個URL即可,就像我截圖裡面一樣,傳入一個合法的網址即可。或者像現在一些移動APP的推廣,把APP下載地址轉為二維碼,只要掃一下就可以下載相應的APP。這個也是目前比較流行的APP的推廣方式。
上面代碼做的事情不多,主要是調用ZXing庫裡面QRCodeWriter().encode的方法對我們傳進去的URL進行編碼,具體如何編碼,這個我這里就不詳細說,有興趣可以看ZXing的源碼。文章最後會給出ZXing的源碼和例子代碼。

4、掃描二維碼獲取信息
掃描獲取二維碼信息的工作稍微復雜一些,主要是需要編寫Camera的使用,這個跟我們一般使用Camera一樣,需要使用Surfaceview作為預覽,這一部我這里就不說了,這個應該不是太復雜。對於使用過Camera做預覽的朋友,應該是挺簡單的事情。獲取二維碼數據的關鍵處理是在Camera的自動對焦回調函數哪裡,調用ZXing的解碼介面。
View Code
這里稍微多說一句,由於解碼需要一定時間,所以ZXing的解碼調用,都是使用了Handler作為線程通信機制,解碼的工作都是放在獨立線程裡面使用的,如果你直接在主線程解碼,恐怕ANR問題是避免不了。
View Code
上面是解碼的線程處理不同狀態的時候需要注意的地方,我們這里只看獲取圖像成功的地方,成功獲取圖片解碼的實在DecodeThread裡面實現,DecodeThread裡面解碼成功後,會把數據序列化,然後保存到Bundle裡面,我們可以直接通過Bundle的序列化,獲取到圖片數據。同時會把解碼後的結果保存到MSG裡面,然後就可以根據實際情況進行處理,例如上面代碼,解碼成功後,會調用一個處理函數:
View Code
上面就是整個二維碼的解碼流程,裡面因為涉及很多Camera的使用,所以你如果需要使用二維碼識別,需要注意一下你的程序需要申請下面的許可權,一般的Camera使用以及Camera的自動對焦等。
View Code
5、結語
上面就是生成和識別二維碼的關鍵流程和代碼,有興趣的朋友可以自己查看ZXing的源碼,裡面有很多圖像分析的知識可以學習。具體使用也可以參考我下面給出的Demo。二維碼對於現在移動開發來說很是很常用的技術,所以有空可以了解一下,說不定什麼時候就用上了。另外,ZXing庫除了二維碼外,其實對於條形碼也是支持的,只是我這里沒有介紹。有需要的自己去看看源碼即可。

閱讀全文

與android二維碼編程相關的資料

熱點內容
表格加密設置列印區域 瀏覽:437
卡耐基pdf下載 瀏覽:922
現在最流行的單片機 瀏覽:88
機頂盒刷機源碼 瀏覽:985
編碼pdf下載 瀏覽:944
隔壁同學app怎麼 瀏覽:299
c語言宏命令 瀏覽:542
php卡死源碼 瀏覽:574
time庫中的clock函數python 瀏覽:989
cad視覺移動命令怎麼打開 瀏覽:821
安卓java調用python 瀏覽:395
java標准時間 瀏覽:137
華為伺服器湖北渠道商雲主機 瀏覽:30
韓式面部護理解壓視頻 瀏覽:301
pdf換成jpg圖片 瀏覽:897
dh加密演算法 瀏覽:107
安卓手機如何隱藏微信信息提示 瀏覽:632
nodejs解壓縮 瀏覽:262
直流雙轉子壓縮機 瀏覽:952
pythonxmlstring 瀏覽:822