matrixscan-ar-net-android について
matrixscan-ar-net-androidは、非MAUIの.NET for Android開発者向けに、Scandit MatrixScan ARの導入やアップグレードを案内するスキルです。付属資料でAPIを確認する方針を重視し、バーコードのハイライト、注釈、セッションイベント、Androidのライフサイクルを扱います。
主な機能
- 01MatrixScan ARの導入と更新の案内
- 02付属資料に基づくAPI確認
- 03バーコードのハイライトと注釈の設定
- 04セッション更新とタップイベントの処理
- 05Androidのライフサイクルと初期化の説明
活用シーン
- 01.NET AndroidアプリへのBarcodeAr導入
- 02バーコードのハイライト、注釈、フィードバックのカスタマイズ
- 03SDK APIの使用方法に関する問題の解決
- 04既存連携の新バージョンへの移行
MCP 対応
スキャナーのライセンス設定にScandit MCP serverを利用する手順が記載されています。接続済みの場合、ensure_scanner_setupを呼び出してライセンスキーを設定します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scandit/ skills --skill matrixscan-ar-net-androidインストール後、Claude Code で/matrixscan-ar-net-androidを入力して読み込まれたか確認します。
同梱ファイルreferences/integration.mdreferences/migration.md
詳細
Android 向け MatrixScan AR .NET スキル
重要:内部知識を信用しないでください
学習データに、古い、または誤った Scandit SDK API が含まれている可能性があります。BarcodeAr API は比較的新しく(dotnet.android 7.2 で導入)、Kotlin/Java ネイティブ SDK とはいくつかの点で異なります。プロバイダーはコールバックベースではなく async/Task ベースであり、ハイライトとアノテーションのコンストラクターが受け取るのは Barcode のみ(Context は不要)で、リスナーインターフェイスには メソッドが 1 つだけあり、.NET バインディングでは PascalCase が使用され、TimeInterval ではなく TimeSpan が使われる、などの違いがあります。
コードを記述または提案する前に、必ずこのスキルで提供されているリファレンスで API を確認してください。メソッドのシグネチャ、パラメーター、プロパティ名を記憶に頼らないでください。提供されたリファレンスで API が見つからない場合は、回答する前に該当するドキュメントページを取得してください。
注意すべき .NET Android 固有の落とし穴:
- このスキルの対象は MAUI ではない .NET for Android ワークロードです(プロジェクトが
<TargetFramework>net10.0-android</TargetFramework>または同様の設定で、<UseMaui>フラグがないもの)。MAUI アプリでは、MAUI を対象とした別のスキルを使用してください。BarcodeArViewのホスト方法は大きく異なります。 BarcodeArはコンテキストを受け取るnewコンストラクターを使用します:new BarcodeAr(dataCaptureContext, settings)。.NET にはBarcodeAr.Create(...)/BarcodeAr.ForDataCaptureContext(...)ファクトリーはありません。BarcodeArSettingsも通常のnewを使用します。(DataCaptureContext.ForLicenseKey(key)は引き続きファクトリー形式を使用します。これは Core にあります。)BarcodeArView.Create(parentView, barcodeAr, dataCaptureContext, viewSettings, cameraSettings)はファクトリーです(BarcodeAr自体とは異なります)。cameraSettings引数は null 許容です。BarcodeAr.RecommendedCameraSettingsを使用するにはnullを渡してください。parentViewはAndroid.Views.View/ViewGroup(通常はFrameLayoutまたはアクティビティのルートコンテンツビュー)です。BarcodeArCoordinatorLayoutはありません。このコンテナーは SparkScan 専用です。BarcodeArViewは、渡された任意のViewGroupに自身を追加します。BarcodeArViewはIDisposableを実装しますが、それ自体は Android のViewではありません。 このクラスは、必要に応じて(ネイティブ相互運用など)Android.Views.Viewに変換するpublic static implicit operator View(BarcodeArView view)を宣言していますが、自分でビュー階層に追加する必要はありません。Createファクトリーが自動的にparentViewに追加します。- ビューのライフサイクルでは
barcodeArView.OnResume()/barcodeArView.OnPause()を使用します。これらは Android 専用メソッド(バインディング内で#if __ANDROID__により条件付きコンパイル)であり、アクティビティのOnPause/OnResumeとは異なります。アクティビティの呼び出しをこれらに転送してください。.NET のBarcodeArViewにOnDestroy()はありません。代わりにDispose()を呼び出してください(アクティビティのOnDestroyまたはDispose内で)。 IBarcodeArListenerにあるメソッドは 1 つだけです:OnSessionUpdated(BarcodeAr, BarcodeArSession, IFrameData)。Kotlin のBarcodeArListenerにあるようなOnObservationStarted/OnObservationStoppedコールバックはありません。これらを実装するとコンパイルエラーになります。このインターフェイスには宣言されていません。- 慣用的な C# では、リスナーインターフェイスよりもイベント API(
barcodeAr.SessionUpdated += handler)を優先してください。ハンドラーはBarcodeAr、Session、FrameDataを含むBarcodeArEventArgsを受け取ります。他のプラットフォームとの互換性のため、AddListener(IBarcodeArListener)も引き続き使用できます。 OnSessionUpdated/SessionUpdatedはバックグラウンドの認識スレッドで実行されます。 UI を更新する場合はRunOnUiThread(() => { … })を使ってディスパッチしてください。- プロバイダーインターフェイスは非同期であり、コールバックベースではありません。
IBarcodeArHighlightProvider.HighlightForBarcodeAsync(Barcode)はTask<IBarcodeArHighlight?>を返し、IBarcodeArAnnotationProvider.AnnotationForBarcodeAsync(Barcode)はTask<IBarcodeArAnnotation?>を返します。Callbackパラメーターやcallback.OnData(...)メソッドを探さないでください。.NET バインディングにはありません。特定のバーコードのハイライト/アノテーションを抑制するには、Task.FromResult<IBarcodeArHighlight?>(null)を返すか、asyncメソッドからnullを返してください。 - ハイライトとアノテーションのコンストラクターが受け取るのは
Barcodeだけです。Context引数はありません。new BarcodeArRectangleHighlight(barcode)、new BarcodeArCircleHighlight(barcode, BarcodeArCircleHighlightPreset.Dot)、new BarcodeArInfoAnnotation(barcode)、new BarcodeArStatusIconAnnotation(barcode)、new BarcodeArPopoverAnnotation(barcode, buttons)を使用してください。Contextを渡すとコンパイルエラーになります。 - シンボロジー名は C# の PascalCase です:
Symbology.Ean13Upca、Symbology.Ean8、Symbology.Code128、Symbology.Code39、Symbology.Qr、Symbology.DataMatrix、Symbology.InterleavedTwoOfFive。Kotlin のアンダースコア形式(EAN13_UPCA)ではありません。 BarcodeArSettingsにはEnabled切り替え機能がありません。BarcodeAr自体にもEnabledプロパティはありません。スキャンを一時停止/再開するには、barcodeArView.Pause()/barcodeArView.Start()を使用してください。- .NET の
BarcodeArViewSettingsは最小限の設定です。 プロパティはSoundEnabled、HapticEnabled、DefaultCameraPositionの 3 つだけです。TriggerButtonCollapseTimeout、InactiveStateTimeout、ToastSettings、DefaultMiniPreviewSizeのようなプロパティを作らないでください。これらは BarcodeAr ではなく SparkScan のものです。 BarcodeArFeedbackはScandit.DataCapture.Barcode.Ar.Feedbackにあり、Core.Common.Feedback.Feedback型のプロパティScannedとTappedを持ちます。引数なしのコンストラクターnew BarcodeArFeedback()は、両方のイベントが無音のフィードバックオブジェクトを生成します。これをbarcodeAr.Feedbackに代入すると、デフォルトのビープ音/バイブレーションが無効になります。デフォルトに戻すには、静的なBarcodeArFeedback.DefaultFeedbackを使用してください。(注:.NET では静的プロパティであり、Kotlin のBarcodeArFeedback.defaultFeedback()メソッドではありません。)- ハイライトのタップ操作は、
BarcodeArViewのHighlightForBarcodeTappedイベント(EventHandler<HighlightForBarcodeTappedEventArgs>)として公開されています。.NET のBarcodeArViewにUiListenerプロパティはありません。Kotlin のIBarcodeArViewUiListenerは、代わりに C# イベントとして公開されています。イベント引数にはBarcodeAr、Barcode、Highlightが含まれます。 barcodeAr.Feedbackはプロパティ(get/set)です。ApplySettingsAsync(BarcodeArSettings)はTaskを返します。BarcodeAr.RecommendedCameraSettingsはメソッドではなく静的プロパティです(Kotlin SDK ではBarcodeAr.createRecommendedCameraSettings()として公開されますが、.NET では getter です)。- .NET API ツリーに
BarcodeArFilter/SetBarcodeFilterはありません。 Kotlin/iOS のsetBarcodeFilter(...)メソッド(8.1 で追加)は、現時点ではdotnet.androidでは公開されていません。使用しないでください。 - SDK 8.0 以降では明示的な初期化が必要です。
Android.App.Applicationをサブクラス化し、[Application]を付与して、Scandit のコードが実行される前にOnCreate()でScanditCaptureCore.Initialize()とScanditBarcodeCapture.Initialize()を呼び出してください。これを行わないと、DI コンテナーに登録がないため、最初のnew BarcodeAr(...)/BarcodeArView.Create(...)呼び出し時に起動エラーが発生します。6.x / 7.x では不要です。 完全なMainApplication.csのテンプレートについては、references/integration.md を参照してください。 - NuGet パッケージは
Scandit.DataCapture.CoreとScandit.DataCapture.Barcodeです。ここでは個別の*.Mauiパッケージはありません。これらは MAUI プロジェクト専用です。学習データからバージョンを推測しないでください。固定する前にWebFetchを使い、https://www.nuget.org/packages/Scandit.DataCapture.Barcode/から最新の安定版を取得してください。存在しないバージョン(例:8.4.0しか公開されていないのに8.13.0を指定)を作り上げると、dotnet restoreがUnable to find package Scandit.DataCapture.Core with version (>= …)で失敗します。手順全体については、references/integration.md のステップ 0 を参照してください。 - Android の
SupportedOSPlatformVersionは24以上である必要があります。.csprojで設定してください。これより低い値では、uses-sdk:minSdkVersion 21 cannot be smaller than version 24 declared in libraryというエラーでビルドに失敗します。 [Activity]が付与されたクラスの<activity>要素をAndroidManifest.xmlに宣言しないでください。[Activity(MainLauncher = true, ...)]属性は .NET for Android における正式な登録方法です。ビルド時に .NET から導出された Java クラス名を使って、正しい名前のエントリーが最終的なマニフェストにマージされます。手動で<activity android:name=".MainActivity">を追加すると、<ApplicationId>を基準に解決され、生成されたクラスと一致しないため、起動時にClassNotFoundException: Didn't find class ... .MainActivityが発生します。マニフェストに追加するのは、スキルが明示的に指定する要素(<uses-feature>、<uses-permission>)だけにしてください。アクティビティは属性に任せてください。- 実行時のカメラ権限ヘルパー(
CameraPermissionActivity)はAppCompatActivityを継承しているため、.csprojにXamarin.AndroidX.AppCompatが必要です。バージョンを固定する場合は、Xamarin のパッチリビジョンを含む利用可能な最も高いバージョン(例:1.7.0ではなく1.7.0.5)を選んでください。.Xサフィックスは Xamarin バインディングレベルの更新を示し、重要な推移的依存関係の修正が含まれています。 - アクティビティには
Theme.AppCompatの派生テーマが必要です。 アクティビティがAppCompatActivityを継承するため、[Activity]属性にTheme = "@style/Theme.AppCompat.Light.NoActionBar"を設定するか、マニフェストの<application>にandroid:theme=...を設定してください。設定しないと、起動時にSetContentViewがIllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activityをスローします。dotnet new androidテンプレートのデフォルトテーマは AppCompat ベースではないため、明示的な設定が必要です。
インテントの振り分け
ユーザーのリクエストに基づき、回答する前に適切なリファレンスファイルを読み込んでください。
- BarcodeAr を一から統合する、設定を行う、ハイライトや注釈をカスタマイズする、セッション更新に対応する、フィードバックをカスタマイズする、またはタップ操作を設定する場合(例:「.NET Android アプリに MatrixScan AR を追加する」「C# でバーコード AR スキャンを設定する」「追跡中のすべてのバーコードに四角形のハイライトを表示する」「バーコードデータを含む情報注釈を表示する」「ビープ音を消す」「ハイライトのタップに反応する」「円形のハイライトに切り替える」)→ references/integration.md を読み、記載された手順に従ってください。
- 既存の MatrixScan AR 統合を移行またはアップグレードする場合(例:「v7 から v8 にアップグレードする」「Scandit .NET SDK を v8 に上げる」「BarcodeAr に関して SDK バージョン間で何が変わったか」「8.x に移行するときに BarcodeAr のコードを変更する必要があるか」)→ references/migration.md を読み、記載された手順に従ってください。
API の使用ポリシー
以下の Scandit リファレンスに明示的に記載された API のみを使用してください。メソッドのシグネチャ、パラメーター、プロパティ名を創作したり、推測したりしないでください。API が存在するか、または呼び出し方法が不明な場合、あるいはコンパイルエラーが発生した場合は、回答する前に該当するリファレンスページを取得してください。ユーザーに自分でドキュメントを確認するよう伝えてはいけません。回答後は、ユーザーがさらに調べられるよう、必ず関連リンクを含めてください。
ドキュメントの URL を決して組み立てたり、推測したりしないでください。 特定のクラスまたはプロパティの API ページが必要な場合:
- まず、すでに取得したページにそのページへの直接リンクがないか確認してください。トピックページには関連する API シンボルへの直接リンクがあります。取得を依頼する際は、必ずリンクも含めるようにしてください。
- 直接リンクが見つからない場合は、API インデックス(以下の表の API リファレンス全体 を参照)を取得し、そこから実際のリンクを抽出して開いてください。
URL の構造は変わることがあります(例:api/ui/ サブディレクトリ)。推測すると 404 エラーにつながります。
ライセンスキー
スキャンには Scandit のライセンスキーが必要です。このスキルでは、ライセンスの製品は native、プラットフォームは android です。
以下の順に進めてください。MCP の利用可否を理由にユーザーを待たせてはいけません。
-
Scandit MCP サーバーが接続されている場合 — 製品に
native、プラットフォームにandroidを指定してensure_scanner_setupを呼び出し、次にget_license_env_commandが返すコマンドを実行して、キーをプロジェクトの.envに書き込みます。チャットに表示するのは、最大でも一部を伏せたプレビューのみとし、キー全体を決して表示しないでください。 -
接続されていない場合 — 一度接続する方法を案内し、その後は手順 1 に進んでください。
- Claude Code:
claude mcp add --transport http scandit https://ssl.scandit.com/mcp - Cursor:
{"mcpServers": {"scandit": {"url": "https://ssl.scandit.com/mcp"}}}を~/.cursor/mcp.jsonに追加します - VS Code:MCP ユーザー設定に
{"servers": {"scandit": {"type": "http", "url": "https://ssl.scandit.com/mcp"}}}を追加します
認証はブラウザー経由のため、ヘッドレス環境または CI ではサポートされていません。サーバーが発行するのはトライアルキーのみです。本番用ライセンスの作成、取り消し、変更は行いません。
- Claude Code:
-
ユーザーが希望しない場合、または MCP クライアントがない場合 — https://ssl.scandit.com でキーを自分で生成してもらいます(アカウントをまだお持ちでない場合:https://ssl.scandit.com/dashboard/sign-up?p=test)。生成したキーを貼り付けてもらってください。
次に、プレースホルダーをキーに置き換えてコードに設定してください。 .env にキーを書き込んだだけでは、アプリには反映されません。.NET は .env を自動で読み込まないため、以下の最も簡単な方法を使用してください。どのプラットフォームでも最も簡単な方法は、.env を読み込み、ライセンスキーの呼び出しにキーを直接指定することです。この場合も、チャットに表示するのは一部を伏せたプレビューのみとしてください。
参考資料
質問に応じて、ユーザーを適切なリソースに案内してください。
| トピック | リソース |
|---|---|
| はじめに | はじめに(.NET for Android) |
| 高度なトピック(カスタムハイライト、カスタムアノテーション、タップ操作、ポップオーバー、フィルター) | 高度な設定 |
| メジャー SDK バージョン間の移行 | 6 → 7 · 7 → 8 |
| API リファレンス全体 | BarcodeAr API(.NET Android) |
このスキルがカバーする API の範囲
公式 RST ドキュメント(docs/source/barcode-capture/api/barcode-ar*.rst および api/ui/barcode-ar-*.rst)で :available: dotnet.android と記載されているすべてのクラスについては、references/integration.md で説明しています。
BarcodeAr—new BarcodeAr(DataCaptureContext?, BarcodeArSettings),Feedback(取得/設定)、ApplySettingsAsync(BarcodeArSettings)→Task、AddListener(IBarcodeArListener)/RemoveListener(IBarcodeArListener)、event EventHandler<BarcodeArEventArgs> SessionUpdated、静的なRecommendedCameraSettings、Dispose。BarcodeArSettings—new BarcodeArSettings()、EnableSymbology(Symbology, bool)、EnableSymbologies(ICollection<Symbology>)、GetSymbologySettings(Symbology)、EnabledSymbologies(取得)、ExpectsOnlyUniqueBarcodes(取得/設定)、SetProperty/GetProperty<T>/TryGetProperty<T>、Dispose。IBarcodeArListener— 単一のメソッドOnSessionUpdated(BarcodeAr, BarcodeArSession, IFrameData)。(OnObservation*コールバックはありません。)BarcodeArSession—AddedTrackedBarcodes(IReadOnlyList<TrackedBarcode>)、RemovedTrackedBarcodes(IReadOnlyList<int>)、TrackedBarcodes(IReadOnlyDictionary<int, TrackedBarcode>)、Reset()。BarcodeArEventArgs—BarcodeAr、Session、FrameData。BarcodeArFeedback—new BarcodeArFeedback()(サイレント)、静的なDefaultFeedback(デフォルト)、Scanned/Tapped(Core.Common.Feedback.Feedback)、Dispose。BarcodeArView—static Create(View parentView, BarcodeAr, DataCaptureContext, BarcodeArViewSettings, CameraSettings?)、HighlightProvider(IBarcodeArHighlightProvider?の取得/設定)、AnnotationProvider(IBarcodeArAnnotationProvider?の取得/設定)、ShouldShowTorchControl/ShouldShowZoomControl/ShouldShowCameraSwitchControl、TorchControlPosition/ZoomControlPosition/CameraSwitchControlPosition(Anchor)、Start()、Stop()、Pause()、Reset()、GetNotificationPresenter()、OnResume()/OnPause()(Android のみ)、event EventHandler<HighlightForBarcodeTappedEventArgs> HighlightForBarcodeTapped、Android.Views.Viewへの暗黙的な変換、Dispose。BarcodeArViewSettings—SoundEnabled(デフォルトはtrue)、HapticEnabled(デフォルトはtrue)、DefaultCameraPosition(デフォルトはWorldFacing)。HighlightForBarcodeTappedEventArgs—BarcodeAr、Barcode、Highlight(IBarcodeArHighlight)。- ハイライト:
IBarcodeArHighlight : IDisposable、IBarcodeArHighlightProvider.HighlightForBarcodeAsync(Barcode) → Task<IBarcodeArHighlight?>、BarcodeArRectangleHighlight(Barcode)のBarcode/Brush/Icon、BarcodeArCircleHighlight(Barcode, BarcodeArCircleHighlightPreset)のBarcode/Brush/Icon/Size、BarcodeArCircleHighlightPresetenum(Dot、Icon)。 - アノテーション:
IBarcodeArAnnotation : IDisposable(AnnotationTriggerを宣言)、IBarcodeArAnnotationProvider.AnnotationForBarcodeAsync(Barcode) → Task<IBarcodeArAnnotation?>。BarcodeArStatusIconAnnotation(Barcode)—AnnotationTrigger、HasTip、Icon、Text、TextColor、BackgroundColor。BarcodeArInfoAnnotation(Barcode)—HasTip、EntireAnnotationTappable、Anchor(BarcodeArInfoAnnotationAnchor)、AnnotationTrigger、Width(BarcodeArInfoAnnotationWidthPreset)、Body(IReadOnlyCollection<BarcodeArInfoAnnotationBodyComponent>)、Header(BarcodeArInfoAnnotationHeader?)、Footer(BarcodeArInfoAnnotationFooter?)、BackgroundColor、Listener(IBarcodeArInfoAnnotationListener?)。BarcodeArPopoverAnnotation(Barcode, IList<BarcodeArPopoverAnnotationButton>)—AnnotationTrigger、EntirePopoverTappable、Listener(IBarcodeArPopoverAnnotationListener?)、Buttons。BarcodeArPopoverAnnotationButton(ScanditIcon, string)—Text、TextSize、Typeface、TextColor、Enabled、Icon。BarcodeArAnnotationTriggerenum:HighlightTapAndBarcodeScan、HighlightTap。
- 情報アノテーションのサブパッケージ(
Scandit.DataCapture.Barcode.Ar.UI.Annotations.Info):BarcodeArInfoAnnotationBodyComponent(Text、TextColor、TextSize、Typeface、StyledTextFormatted、LeftIcon、RightIcon、LeftIconTappable、RightIconTappable、TextAlignment)、BarcodeArInfoAnnotationHeader(Text、TextSize、Typeface、TextColor、Icon、BackgroundColor)、BarcodeArInfoAnnotationFooter(Text、TextSize、Typeface、TextColor、Icon、BackgroundColor)、BarcodeArInfoAnnotationAnchorenum(Left、Right、Bottom、Top)、BarcodeArInfoAnnotationWidthPresetenum(Small、Medium、Large)、IBarcodeArInfoAnnotationListener(OnInfoAnnotationHeaderTapped、OnInfoAnnotationFooterTapped、OnInfoAnnotationLeftIconTapped、OnInfoAnnotationRightIconTapped、OnInfoAnnotationTapped)。 IBarcodeArPopoverAnnotationListener—OnPopoverButtonTapped、OnPopoverTapped。TrackedBarcode(Scandit.DataCapture.Barcode.Batch.Data内)—Barcode、Identifier、Location。