請依照底下步驟說明,建置一個可以進行條碼或者QR Code掃瞄功能的應用程式
- 建置一個 Prism 的 Xamarin.Forms 專案
- 在方案中啟動 NuGet 安裝工具,搜尋套件
ZXing.Net.Mobile.Forms
,將這個套件安裝到所有的專案內。 - 建置一個 Prism 的 NavigationPage,名稱為 NaviPage
- 修改 App.xaml.cs,需要使用導航頁面進入到 MainPage 頁面
NavigationService.NavigateAsync("Navi/MainPage?title=Hello%20from%20Xamarin.Forms");
- 修改 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>
- 修改 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 專案修正
- 找到
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);
}
}
- 執行這個 Android 專案,當進入到首頁頁面,點選 Scan 按鈕,就可以看到如下圖的掃描畫面。
- 下圖是有掃描到發票 QR Code 的結果畫面
沒有留言:
張貼留言