XAML in Xamarin.Forms 基礎篇 電子書

XAML in Xamarin.Forms 基礎篇 電子書
XAML in Xamarin.Forms 基礎篇 電子書

Xamarin.Forms 快速入門 電子書

Xamarin.Forms 快速入門 電子書
Xamarin.Forms 快速入門 電子書

2016/11/04

在 Xamarin.Forms專案中,建置一維或二維條碼掃描功能

請依照底下步驟說明,建置一個可以進行條碼或者QR Code掃瞄功能的應用程式
  1. 建置一個 Prism 的 Xamarin.Forms 專案
  2. 在方案中啟動 NuGet 安裝工具,搜尋套件 ZXing.Net.Mobile.Forms,將這個套件安裝到所有的專案內。
  3. 建置一個 Prism 的 NavigationPage,名稱為 NaviPage
  4. 修改 App.xaml.cs,需要使用導航頁面進入到 MainPage 頁面
            NavigationService.NavigateAsync("Navi/MainPage?title=Hello%20from%20Xamarin.Forms");
  1. 修改 MainPage.xaml,增加一個按鈕與其點擊事件,修改後的 XAML 檔案如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             prism:ViewModelLocator.AutowireViewModel="True"
             x:Class="XFScan.Views.MainPage"
             Title="MainPage">
  <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
    <Label Text="{Binding Title}" />
        <Button Text="Scan" Clicked="Button_Clicked" />
    </StackLayout>
</ContentPage>
  1. 修改 MainPage.xaml 的 Code Behind,增加按鈕事件的定義,程式碼如下:
    在 Code Behind 中,產生一個 ZXingScannerPage 物件,並且綁定其 OnScanResult 事件,其會當有掃描結果的時候,會來執行這個事件委派方法,在該處理方法中,使用 IsScanning 設定為 false,停止掃描動作,接著將結果顯示出來。
using Xamarin.Forms;
using ZXing.Net.Mobile.Forms;

namespace XFScan.Views
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private async void Button_Clicked(object sender, System.EventArgs e)
        {
            // 產生掃描條碼頁面物件
            var scanPage = new ZXingScannerPage();
            scanPage.Title = "請掃描條碼";

            scanPage.OnScanResult += (result) => {
                // 停止掃描
                scanPage.IsScanning = false;

                // 顯示掃描結果
                Device.BeginInvokeOnMainThread(() => {
                    Navigation.PopAsync();
                    DisplayAlert("Scanned Barcode", result.Text, "OK");
                });
            };

            // 導航到掃描條碼頁面
            await Navigation.PushAsync(scanPage);
        }
    }
}

Android 專案修正

  1. 找到 MainActivity.cs 檔案,修正 MainActivity 類別如下:
    在 OnCreate 方法內,需要呼叫ZXing.Net.Mobile.Forms.Android.Platform.Init();`,以便進行進行 ZXing 元件初始化動作。
    另外,需要增加 OnRequestPermissionsResult 方法定義。
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.tabs;
            ToolbarResource = Resource.Layout.toolbar;

            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);

            // 在此進行 ZXing 元件初始化
            ZXing.Net.Mobile.Forms.Android.Platform.Init();

            LoadApplication(new App(new AndroidInitializer()));
        }

        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
        {
            global::ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
  1. 執行這個 Android 專案,當進入到首頁頁面,點選 Scan 按鈕,就可以看到如下圖的掃描畫面。
    QRCode掃描
  2. 下圖是有掃描到發票 QR Code 的結果畫面
    QRCode掃描結果

參考資料

範例專案

沒有留言:

張貼留言