diff --git a/.gitignore b/.gitignore
index 740321b79..348806d54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@ obj
[Oo]bj
[Dd]ebug*/
[Rr]elease*/
+_ReSharper.Caches/
*.unsuccessfulbuild
*.pidb
diff --git a/Sample.NetAndroid/AndroidManifest.xml b/Sample.NetAndroid/AndroidManifest.xml
new file mode 100644
index 000000000..2c80a349e
--- /dev/null
+++ b/Sample.NetAndroid/AndroidManifest.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Sample.NetAndroid/FragmentActivity.cs b/Sample.NetAndroid/FragmentActivity.cs
new file mode 100644
index 000000000..0ce4f7eae
--- /dev/null
+++ b/Sample.NetAndroid/FragmentActivity.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Collections.Generic;
+using ZXing.Mobile;
+using Android.OS;
+using Android.App;
+using Android.Widget;
+using Android.Content.PM;
+
+namespace Sample.NetAndroid;
+
+[Activity(Label = "ZXing.Net.Mobile", Theme = "@style/Theme.AppCompat.Light", ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden)]
+public class FragmentActivity : AndroidX.Fragment.App.FragmentActivity
+{
+ ZXingScannerFragment scanFragment;
+
+ protected override void OnCreate(Bundle savedInstanceState)
+ {
+ base.OnCreate(savedInstanceState);
+
+ SetContentView(Resource.Layout.FragmentActivity);
+ }
+
+ protected override void OnResume()
+ {
+ base.OnResume();
+
+
+ if (scanFragment == null)
+ {
+ scanFragment = new ZXingScannerFragment();
+
+ SupportFragmentManager.BeginTransaction()
+ .Replace(Resource.Id.fragment_container, scanFragment)
+ .Commit();
+ }
+
+ Scan();
+ }
+
+ public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults) =>
+ Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
+
+ protected override void OnPause()
+ {
+ scanFragment?.StopScanning();
+
+ base.OnPause();
+ }
+
+ void Scan()
+ {
+ var opts = new MobileBarcodeScanningOptions
+ {
+ PossibleFormats = new List { ZXing.BarcodeFormat.All_1D },
+ ScanningArea = ScanningArea.From(0f, 0.49f, 1f, 0.51f),
+ CameraResolutionSelector = availableResolutions =>
+ {
+ foreach (var ar in availableResolutions)
+ {
+ Console.WriteLine("Resolution: " + ar.Width + "x" + ar.Height);
+ }
+
+ return null;
+ },
+ AutoRotate = true
+ };
+
+ scanFragment.StartScanning(
+ result =>
+ {
+ // Null result means scanning was cancelled
+ if (result == null || string.IsNullOrEmpty(result.Text))
+ {
+ Toast.MakeText(this, "Scanning Cancelled", ToastLength.Long).Show();
+ return;
+ }
+
+ // Otherwise, proceed with result
+ RunOnUiThread(() => Toast.MakeText(this, "Scanned: " + result.Text, ToastLength.Short).Show());
+ },
+ opts);
+ }
+}
diff --git a/Sample.NetAndroid/ImageActivity.cs b/Sample.NetAndroid/ImageActivity.cs
new file mode 100644
index 000000000..61fa92240
--- /dev/null
+++ b/Sample.NetAndroid/ImageActivity.cs
@@ -0,0 +1,22 @@
+namespace Sample.NetAndroid;
+
+[Activity(Label = "ImageActivity")]
+public class ImageActivity : Activity
+{
+ ImageView imageBarcode;
+
+ protected override void OnCreate(Bundle bundle)
+ {
+ base.OnCreate(bundle);
+
+ SetContentView(Resource.Layout.ImageActivity);
+
+ imageBarcode = FindViewById(Resource.Id.imageBarcode);
+
+ var barcodeWriter =
+ new ZXing.Mobile.BarcodeWriter { Format = ZXing.BarcodeFormat.QR_CODE, Options = new ZXing.Common.EncodingOptions { Width = 300, Height = 300 } };
+ var barcode = barcodeWriter.Write("ZXing.Net.Mobile");
+
+ imageBarcode.SetImageBitmap(barcode);
+ }
+}
diff --git a/Sample.NetAndroid/MainActivity.cs b/Sample.NetAndroid/MainActivity.cs
new file mode 100644
index 000000000..780e317b6
--- /dev/null
+++ b/Sample.NetAndroid/MainActivity.cs
@@ -0,0 +1,114 @@
+using Android.Content.PM;
+using Android.Views;
+using AndroidX.Fragment.App;
+using Xamarin.Essentials;
+using ZXing.Mobile;
+
+namespace Sample.NetAndroid
+{
+ [Activity(
+ Label = "@string/app_name",
+ MainLauncher = true,
+ Theme = "@style/Theme.AppCompat.Light",
+ ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden)]
+ public class MainActivity : Activity
+ {
+ MobileBarcodeScanner scanner;
+ Button buttonScanCustomView;
+ Button buttonScanDefaultView;
+ Button buttonContinuousScan;
+ Button buttonFragmentScanner;
+ Button buttonGenerate;
+
+ protected override void OnCreate(Bundle? savedInstanceState)
+ {
+ base.OnCreate(savedInstanceState);
+
+ Platform.Init(Application);
+
+ // Set our view from the "main" layout resource
+ SetContentView(Resource.Layout.activity_main);
+
+ //Create a new instance of our Scanner
+ scanner = new MobileBarcodeScanner();
+
+ buttonScanDefaultView = FindViewById