開始之前先給各位上個運行效果圖
二維碼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瀏覽器的地址欄也有自帶二維碼
在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 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); }
參數
- ( attemptBoth(默認), dontInvert,onlyInvert或invertFirst)
- 應jsQR試圖反轉圖像找到與黑色背景而不是白色背景上的黑色模塊白色模塊QR碼。此選項默認attemptBoth為向后兼容性但會導致性能下降約50%,并且可能dontInvert在將來的版本中默認為。
返回值
如果QR能夠被解碼,則庫將返回具有以下鍵的對象。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。