【Android Studio】結合 ZXing 掃描 QRco

2020-01-16  本文已影响0人  Olivia_Huang

以下是复制此网页:http://oldgrayduck.blogspot.com/2018/01/android-studio-zxing-qrcode.html

【Android Studio】結合 ZXing 掃描 QRcode

ZXing 是 Android 平台上,開放原始碼,掃描 一維 及 二維條碼(QRcode) 的 app,網路上也有熱心的大大包裝成套件,讓人更容易將自己的 app 與 ZXing 結合,讓自己的 app 具有掃描 QRcode 的功能。

建立一個新專案,在新專案精靈建立專案的過程中選擇 Empty Activity,並勾選 Backwards Compatibility(AppCompat)

修改 app 層級的 build.gradle

dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:26.1.0'

    ...

    ...

    // 加入這行, AndroidStudio 就會自動下載這個套件, 好神奇!!

    compile 'com.journeyapps:zxing-android-embedded:3.5.0'

}

ps:這個套件,似乎是 journeyapps.com 這家公司打包的。

延伸參考 ----

Add Build Dependencies

activity_main.xml

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

<RelativeLayout

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

    xmlns:app="http://schemas.android.com/apk/res-auto"

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

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="com.tw.whalin.qrcodetest.MainActivity">

    <Button

        android:id="@+id/button"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_alignParentRight="true"

        android:layout_alignParentTop="true"

        android:onClick="onbuttonclick"

        android:text="Button"

        tools:layout_editor_absoluteX="-9dp"

        tools:layout_editor_absoluteY="16dp"/>

</RelativeLayout>

MainActivity.java

// 注意 MainActivity 是繼承自 AppCompatActivity

// 可能套件的作者當時也是這麼做的吧

// 要繼承自 Activity 的方法再另外找時間研究了...

public class MainActivity extends AppCompatActivity

{

    private IntentIntegrator scanIntegrator;

    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

    public void onbuttonclick(View v)

    {

        View button1 = (View) findViewById(R.id.button);

        scanIntegrator = new IntentIntegrator(MainActivity.this);

        scanIntegrator.setPrompt("請掃描");

        scanIntegrator.setTimeout(300000);

        scanIntegrator.initiateScan();

    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent)

    {

        IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

        if (scanningResult != null)

            {

                if(scanningResult.getContents() != null)

                {

                    String scanContent = scanningResult.getContents();

                    if (!scanContent.equals(""))

                    {

                        Toast.makeText(getApplicationContext(),"掃描內容: "+scanContent.toString(), Toast.LENGTH_LONG).show();

                    }

                }

            }

        else

            {

                super.onActivityResult(requestCode, resultCode, intent);

                Toast.makeText(getApplicationContext(),"發生錯誤",Toast.LENGTH_LONG).show();

            }

    }

}

執行 app,點擊 按鈕,會啟用照相機,預設是橫式畫面,但還是可以直向掃描。

若一定要直式畫面掃描,也行。

修改 AndroidManifest.xml

<application ...>

    ...

    ...

    <activity

        android:name="com.journeyapps.barcodescanner.CaptureActivity"

        android:screenOrientation="fullSensor"

        tools:replace="screenOrientation" />

    ...

    ...

小改一下上面的程式:

public void onbuttonclick(View v)

{

    View button1 = (View) findViewById(R.id.button);

    scanIntegrator = new IntentIntegrator(MainActivity.this);

    scanIntegrator.setPrompt("請掃描");

    scanIntegrator.setTimeout(300000);

    scanintegrator.setOrientationLocked(false);    // 加入這一行指令

    scanIntegrator.initiateScan();

}

上一篇下一篇

猜你喜欢

热点阅读