整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Android 條形碼、二維碼掃一掃與生成二維碼實現

          Android 條形碼、二維碼掃一掃與生成二維碼實現

          開始之前先給各位上個運行效果圖

          二維碼QRcode全稱Quick Response Code

          通過在一個矩形區域內使用黑白像素來進行編碼

          高糾錯性、高可用性、高識別性

          四周面有3個大的方框和一個小的方框,用于二維碼的定位。通過識別這幾個標識位來定位二維碼,并對它進行解析。二維碼的快速發展得益以智能手機的快速發展,常別用在數據分享和手機收款、付款

          更多內容參考360百科http://baike.so.com/doc/6326261-6539869.html

          比較有名的二維碼第三方庫ZXing (谷歌所開源的二維碼掃描庫,用于在Android、javaSE)

          Zxing是谷歌開放源碼的,用Java實現的多種格式的1d、2d條碼圖像處理,它包含聯系到其他語言的端口

          ZXing可以實現使用手機的內置的攝像頭完成條形碼掃描和解碼

          https://github.com/ThePacific/zxing-barcode

          由于谷歌的ZXing開源庫功能過于強大,而且比較難以快捷集成到我們的項目中,我在此提供一個ZXing經過處理的第三方開源庫,放在360網盤供大伙下載希望對各位朋友會有所幫助

          下載地址:https://yunpan.cn/cPaUIBZE3Npiy 訪問密碼 b316

          生成二維碼工具

          網絡可以生成二維碼的網站很多如“草料二維碼” http://cli.im/

          360瀏覽器的地址欄也有自帶二維碼

          Firefox瀏覽器的地址欄也有自帶二維碼

          現在開始進入正題,ZXing第三方庫引入到我們的工程

          在android studio 中創建一個自己的新工程或在現有的項目中應用: czgLearnAndroidDemo

          引入第三庫的詳細步驟我再“Android Studio 使用百度移動生態SDK(廣告聯盟)”博文中很詳細的圖文說明,如不熟悉可查看該博文。

          第一步:需要引入

          libzxing工程

          選擇菜單:File/new/import module

          第二步:將libzxing工程引入到項目中

          右鍵項目選擇菜單open module settings

          選擇app/ dependencies/+加號/Module dependencies,把libzxing選擇并添加進去

          注意:引入后我們不需要手工添加CAMERA、VIBRATE的權限,因為我們引入的libzxing模塊的AndroidManifest.xml中已經幫我們添加好需要的權限。

          第三步:在工程中創建XZingMainActivity(Activity)

          activity_zxing_main.xml

          <?xml version="1.0" encoding="utf-8"?>

          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

          xmlns:tools="http://schemas.android.com/tools"

          android:layout_width="match_parent"

          android:layout_height="match_parent"

          android:orientation="vertical"

          android:paddingBottom="@dimen/activity_vertical_margin"

          android:paddingLeft="@dimen/activity_horizontal_margin"

          android:paddingRight="@dimen/activity_horizontal_margin"

          android:paddingTop="@dimen/activity_vertical_margin"

          tools:context=".XZingMainActivity">

          <Button

          android:layout_width="fill_parent"

          android:layout_height="wrap_content"

          android:text="掃描二維碼"

          android:id="@+id/btn_scan"

          android:layout_alignParentLeft="true"

          android:layout_alignParentStart="true"

          android:onClick="scan" />

          <TextView

          android:layout_width="wrap_content"

          android:layout_height="wrap_content"

          android:text="---顯示掃描結果----"

          android:textSize="22dp"

          android:id="@+id/tv_ScanResult" />

          <EditText

          android:layout_width="match_parent"

          android:layout_height="wrap_content"

          android:id="@+id/et_Text"

          android:hint="這里請輸入你要生成二維碼的內容" />

          <CheckBox

          android:layout_width="wrap_content"

          android:layout_height="wrap_content"

          android:text="二維碼是否要包含圖片Logo"

          android:id="@+id/cb_includeLogo"

          android:checked="false" />

          <Button

          android:layout_width="fill_parent"

          android:layout_height="wrap_content"

          android:text="生成二維碼QRcode"

          android:id="@+id/btn_CreateQRcode"

          android:onClick="CreateQRode" />

          <ImageView

          android:layout_width="wrap_content"

          android:layout_height="wrap_content"

          android:id="@+id/imgv_QRcode"

          android:layout_gravity="center_horizontal"

          android:background="@drawable/appicon" />

          </LinearLayout>

          package czg.czgxzing;

          import android.content.Intent;

          import android.graphics.Bitmap;

          import android.graphics.BitmapFactory;

          import android.hardware.camera2.CaptureRequest;

          import android.support.v7.app.AppCompatActivity;

          import android.os.Bundle;

          import android.util.Log;

          import android.view.View;

          import android.widget.CheckBox;

          import android.widget.EditText;

          import android.widget.ImageView;

          import android.widget.TextView;

          import android.widget.Toast;

          import com.xys.libzxing.zxing.activity.CaptureActivity;

          import com.xys.libzxing.zxing.encoding.EncodingUtils;

          public class XZingMainActivity extends AppCompatActivity {

          private TextView tv_ScanResult;

          private EditText et_Text;

          private ImageView imgv_QRcode;

          private CheckBox cb_includeLogo;

          @Override

          protected void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.activity_zxing_main);

          tv_ScanResult=(TextView) findViewById(R.id.tv_ScanResult);

          et_Text=(EditText) findViewById(R.id.et_Text);

          imgv_QRcode=(ImageView) findViewById(R.id.imgv_QRcode);

          cb_includeLogo=(CheckBox) findViewById(R.id.cb_includeLogo);

          }

          //直接調用第三方ZXing庫的api進行掃描

          public void scan(View view){

          startActivityForResult(new Intent(XZingMainActivity.this,

          CaptureActivity.class),0);

          }

          @Override

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

          super.onActivityResult(requestCode, resultCode, data);

          if (resultCode==RESULT_OK){

          Bundle bundle=data.getExtras();//通過Bundle獲取掃描后的結果數據

          String sResult=bundle.getString("result");

          tv_ScanResult.setText(sResult);

          System.out.println("查看讀取值"+sResult);

          }

          }

          public void CreateQRode(View view){

          String sInput=et_Text.getText().toString();

          if (sInput.equals("")){

          Toast.makeText(XZingMainActivity.this,"還沒輸入要生成的二維碼,請輸入要生成二維碼的內容",Toast.LENGTH_SHORT).show();

          }else{

          if (cb_includeLogo.isChecked()==false){

          //調用ZXing類庫的createQRCode生成二維碼----不包含圖片

          Bitmap bitmap=EncodingUtils.createQRCode(sInput,500,500,null);

          imgv_QRcode.setImageBitmap(bitmap);

          }else{

          //調用ZXing類庫的createQRCode生成二維碼----包含圖片

          Bitmap bitmap=EncodingUtils.createQRCode(sInput,500,500,

          BitmapFactory.decodeResource(getResources(),R.drawable.appicon));

          imgv_QRcode.setImageBitmap(bitmap);

          }

          }

          }

          }

          最后感謝提供的分享平臺,

          分享是一種美德,牽手是一種生活方式。

          注【無心的運營攻略】:每天一篇干貨,少走三年彎路。

          你有沒有見過一個寶貝,前幾天數據,只有成交沒有流量,沒有訪客。


          然后過幾天莫名其妙的。


          搜索突然就爆了.....爆了......爆了.......


          基本上這種情況,都是用的都是無痕掃碼玩法。


          這種玩法直接進入訂單頁,沒有訪客足跡,也不會被生意參謀記錄,雖然是無痕下單,但還是有權重的,確認收貨之后,搜索是還是可以起來的。


          下面我來給大家詳細介紹一下,無痕掃碼玩法的具體操作。


          這種玩法的原理是根據替換付款頁面的地址中的skuid和商品id來實現的:


          下單入口代碼:

          https://h5.m.taobao.com/cart/order.html?buyNow=false&buyParam=615435872558_1_4512805343789


          其中615435872558是商品id,

          4512805343789是skuid,

          中間那個1是下單數量,

          商品id可以在PC端淘寶官網寶貝地址上找到,就是id=后面的那串數字。


          圖片來源:公眾號【無心的運營攻略】


          如何快速獲取寶貝的skuid:

          天貓店鋪點擊寶貝SKU圖片,網站地址鏈接就會顯示skuid,直接復制下來就可以了。

          圖片來源:公眾號【無心的運營攻略】

          淘寶店鋪,快速獲取skuid:

          1.瀏覽器打開寶貝所在網頁,F12

          2.Ctrl+F,搜索skuid,enter鍵確認,即可出現寶貝的skuid

          圖片來源:公眾號【無心的運營攻略】


          當我們獲取到了需要操作的寶貝id與skuid之后,就可以置換到上面給的代碼當中了。

          https://h5.m.taobao.com/cart/order.html?buyNow=false&buyParam=615435872558_1_4512805343789


          百度鏈接轉二維碼工具,之后只需把鏈接轉化為二維碼,直接發給刷手就可以了。


          這是非常規玩法,雖然風險不是很大,但還是建議先用小店測試,成功后再用在大店上比較穩妥。目前方法還是有效的,有興趣的可以嘗試。

          一個純javascript二維碼閱讀庫。該庫接收原始圖像,并將定位,提取和解析其中的任何QR碼。github star 11K+, Apache License 2.0協議。jsQR旨在成為一個完全獨立的掃描QR碼庫。根據設計,它不包含任何特定于平臺的代碼。這使得它可以輕松掃描前端網絡攝像頭流,用戶上傳的圖像,或者用作后端Node.js過程的一部分。如果要使用jsQR掃描網絡攝像頭流,則需要ImageData從視頻流中提取。然后可以將其傳遞給jsQR。github 項目截圖:

          快速上手

          • 安裝(npm)
          npm install jsqr --save
          // ES6 import
          import jsQR from "jsqr";
          // CommonJS require
          const jsQR=require("jsqr");
          jsQR(...);
          
          • 瀏覽器
          <script src="jsQR.js"></script>
          <script>
           jsQR(...);
          </script>
          
          • 用法

          jsQR導出一個方法,該方法接受3個參數,表示您要解碼的圖像數據。另外,可以使用選項對象來進一步配置掃描行為。

          const code=jsQR(imageData,width,height,options ?);
          if(code){
           console.log(“找到二維碼”,code);
          }
          

          參數

          • imageData- Uint8ClampedArray表單中的一個RGBA像素值[r0, g0, b0, a0, r1, g1, b1, a1, ...]。因此,這個數組的長度應該是4 * width * height。此數據與ImageData接口的格式相同,并且通常 由節點模塊返回以讀取圖像。
          • width - 要解碼的圖像的寬度。
          • height - 要解碼的圖像的高度。
          • options (可選) - 附加選項。
          • inversionAttempts

          - ( attemptBoth(默認), dontInvert,onlyInvert或invertFirst)

          - 應jsQR試圖反轉圖像找到與黑色背景而不是白色背景上的黑色模塊白色模塊QR碼。此選項默認attemptBoth為向后兼容性但會導致性能下降約50%,并且可能dontInvert在將來的版本中默認為。

          返回值

          如果QR能夠被解碼,則庫將返回具有以下鍵的對象。

          • binaryData- Uint8ClampedArray- QR碼的原始字節。
          • data - QR碼數據的字符串版本。
          • location - 具有描述QR碼關鍵點的鍵的對象。每個鍵都是表單的一個點{x: number, y: number}。有以下位置的。
          • 角落 - topRightCorner/ topLeftCorner/ bottomRightCorner/ bottomLeftCorner;
          • Finder模式 - topRightFinderPattern/ topLeftFinderPattern/bottomLeftFinderPattern
          • 也可以為BottomRightAlignmentPattern指定一個點,前提是存在一個點并且可以定位該點。

          主站蜘蛛池模板: 日韩一区二区三区免费播放| 亚洲熟女一区二区三区| 日本不卡一区二区视频a| 鲁丝丝国产一区二区| 日韩人妻无码一区二区三区久久99| 中文字幕国产一区| 精品乱子伦一区二区三区| 无码国产精品一区二区免费vr| 亚洲av成人一区二区三区在线观看 | 国产综合视频在线观看一区| 国产萌白酱在线一区二区| 日本免费一区二区三区 | 日本免费一区二区久久人人澡| 天堂国产一区二区三区| 中文字幕AV无码一区二区三区| 国产在线观看一区二区三区 | 在线成人一区二区| 成人一区二区三区视频在线观看| 无码人妻av一区二区三区蜜臀| 精品免费久久久久国产一区| 精品国产一区二区三区AV性色| 日韩AV无码一区二区三区不卡| 八戒久久精品一区二区三区| 精品人妻一区二区三区四区在线 | 国产无人区一区二区三区| 日本不卡一区二区视频a| 亚洲视频在线一区| 东京热无码av一区二区| 中文无码精品一区二区三区 | 国产一区二区三区在线2021 | 99国产精品一区二区| chinese国产一区二区| 日韩精品一区二区三区中文字幕| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲国产成人久久一区WWW | 极品少妇伦理一区二区| 一区二区三区在线播放视频| 99精品国产一区二区三区| 国产一区二区在线看| 日韩精品乱码AV一区二区| 国产乱人伦精品一区二区|