mcpField
B
barcode-capture-net-android

barcode-capture-net-android

github.com/scandit開発2041 回インストール5 日前に更新
リポジトリ

barcode-capture-net-android について

非 MAUI の .NET for Android プロジェクトで Scandit BarcodeCapture を扱うコーディングエージェント向けスキルです。統合や移行の質問を参照資料に振り分け、記憶に頼らず API を確認する方針を示します。

主な機能

  1. 01.NET Android BarcodeCapture API の案内
  2. 02統合・アップグレード・移行の振り分け
  3. 03バージョン別 API とライフサイクルの注意点
  4. 04文書化された API の確認方針
  5. 05Scandit ライセンスキー設定の案内

活用シーン

  1. 01.NET Android アプリへのバーコードスキャン追加
  2. 02既存の Scandit 統合のアップグレード
  3. 03サードパーティ製スキャナーの置き換え

MCP 対応

Scandit リモート MCP サーバーを使ったスキャナーライセンスの設定と、対象となるトライアルキーの取得方法を説明します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scandit/skills --skill barcode-capture-net-android

インストール後、Claude Code で/barcode-capture-net-androidを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
integration.md
migration.md
third-party-migration.md

詳細

翻訳後に原文が更新されています。最新の内容は原文をご確認ください。

Android 向け BarcodeCapture .NET スキル

重要:内部知識を信頼しないでください

トレーニングデータには、古くなった、または誤った Scandit SDK API が含まれている可能性があります。BarcodeCapture API は、SDK のメジャーバージョン間で大幅に変更されることがあります。プロパティの名前が変更されたり、削除されたり、再構成されたりします。.NET バインディングでは、Kotlin/Java のネイティブ SDK とは異なる命名規則も使用されます(PascalCase、forDataCaptureContext ではなく Create(...) ファクトリー、isEnabled ではなく Enabled など)。

コードを作成または提案する前に、必ずこのスキルで提供されているリファレンスを確認して API を検証してください。 記憶しているメソッドシグネチャ、パラメーター、プロパティ名に頼らないでください。提供されているリファレンスで API が見つからない場合は、回答する前に該当するドキュメントページを取得してください。

注意すべき .NET-Android 固有の落とし穴:

  • このスキルの対象は、MAUI ではない .NET for Android ワークロード(プロジェクトが <TargetFramework>net10.0-android</TargetFramework> で、<UseMaui> フラグがないもの)です。MAUI アプリでは、代わりに barcode-capture-net-maui スキルを使用してください。
  • .NET API では、Kotlin の forDataCaptureContext/newInstance という名前ではなく、PascalCase のファクトリーを使用します。BarcodeCapture.Create(context, settings)、BarcodeCaptureSettings.Create()、BarcodeCaptureOverlay.Create(barcodeCapture, dataCaptureView)、DataCaptureView.Create(dataCaptureContext) を使用してください。
  • シンボロジー名は C# の PascalCase です。Symbology.Ean13Upca、Symbology.Ean8、Symbology.Code128、Symbology.InterleavedTwoOfFive、Symbology.Qr、Symbology.DataMatrix を使用してください。Kotlin のアンダースコア形式(EAN13_UPCA、INTERLEAVED_TWO_OF_FIVE)ではありません。
  • キャプチャモードの有効プロパティは barcodeCapture.Enabled です(IsEnabled ではありません)。.NET バインディングの IDataCaptureMode インターフェースは Enabled を公開しています。
  • CodeDuplicateFilter の型は TimeSpan です。Kotlin/Java の型である TimeInterval ではありません。CodeDuplicate.DefaultDuplicateFilter、CodeDuplicate.ReportDataAndSymbologyOnlyOnce、TimeSpan.FromMilliseconds(500)、TimeSpan.FromSeconds(2.5)、または TimeSpan.Zero を使用してください。CodeDuplicateFilter = 500 と記述すると、型エラーになります。
  • BarcodeCapture.RecommendedCameraSettings はメソッドではなく静的プロパティです。標準的なパターン(公式 .NET Android サンプルで使用)は、camera = Camera.GetDefaultCamera(); camera.ApplySettingsAsync(BarcodeCapture.RecommendedCameraSettings); です。.NET バインディングには Camera.GetDefaultCamera(CameraSettings?) オーバーロードもあります(内部で ApplySettingsAsync を呼び出します)が、サンプルでは明示的な2行形式を使用しています。分かりやすさを優先して、こちらを使用してください。
  • IBarcodeCaptureListener のコールバック名は C# 形式です。OnBarcodeScanned、OnSessionUpdated、OnObservationStarted、OnObservationStopped を使用します。IFrameData パラメーターの名前は frameData です。
  • .NET バインディングでは、BarcodeCapture の C# イベントベース API も公開されています。BarcodeScanned と SessionUpdated(どちらも EventHandler<BarcodeCaptureEventArgs>)です。リスナーインターフェースとイベントのどちらか一方を使用してください。同じハンドラーを両方の方法で登録しないでください。
  • OnBarcodeScanned は UI スレッド以外から呼び出されます。UI を更新する場合は、RunOnUiThread(() => { … }) を使用してディスパッチしてください。
  • 重複スキャンや競合状態を防ぐため、処理を行う前に OnBarcodeScanned の冒頭で barcodeCapture.Enabled = false を呼び出してください。アプリが再びスキャン可能になったら、barcodeCapture.Enabled = true で有効に戻します。
  • OnPause() でカメラをオフにし、OnResume() で camera.SwitchToDesiredStateAsync(FrameSourceState.Off)/FrameSourceState.On を使用して再び有効にしてください。アクティビティがバックグラウンドにある間は、カメラをアクティブにしてはいけません。
  • 最初のスキャン前に、実行時に Android.Manifest.Permission.Camera を要求してください。マニフェストで宣言するだけでは、API 23 以降では不十分です。公式 .NET Android サンプルでは、RequestPermissions と OnRequestPermissionsResult を持つ CameraPermissionActivity 基底クラスを使用しています。
  • [Activity] 属性が付いたクラスの <activity> 要素を AndroidManifest.xml に宣言しないでください。 [Activity(MainLauncher = true, ...)] 属性は .NET for Android における標準的な登録方法です。ビルド時に .NET 由来の Java クラス名(通常は <lowercase-namespace>.MainActivity)を使用して、正しい名前のエントリが最終マニフェストにマージされます。手動で <activity android:name=".MainActivity"> を指定すると、<ApplicationId>(例:com.companyname.MyApp.MainActivity)を基準に解決され、生成されたクラスと一致しないため、起動時に ClassNotFoundException: Didn't find class ... .MainActivity が発生します。マニフェストには、このスキルが明示的に求める要素(<uses-feature>、<uses-permission>、必要に応じた <application> の android:theme)のみを追加し、アクティビティは属性に任せてください。
  • DataCaptureView.Create(dataCaptureContext) は Android の View を返します。幅と高さの両方に LayoutParams.MatchParent を設定し、FrameLayout コンテナーに追加してください。.NET バインディングの DataCaptureView.Create は Context パラメーターを受け取りません(Kotlin の DataCaptureView.newInstance(context, dataCaptureContext) とは異なります)。
  • NuGet パッケージは Scandit.DataCapture.Core と Scandit.DataCapture.Barcode です。ここでは個別の *.Maui パッケージは使用しません。これらは MAUI プロジェクト専用です。トレーニングデータをもとにバージョンを推測しないでください。固定する前に、WebFetch で https://www.nuget.org/packages/Scandit.DataCapture.Barcode/ から最新の安定版を取得してください。存在しないバージョン(例:8.4.0 のみ公開されているのに 8.13.0 を指定する)を指定すると、Unable to find package Scandit.DataCapture.Core with version (>= …) というエラーで dotnet restore が失敗します。詳しい手順については、references/integration.md の Step 0 を参照してください。
  • CameraPermissionActivity ヘルパーは AppCompatActivity を継承するため、.csproj に Xamarin.AndroidX.AppCompat が必要です。dotnet new android では推移的に追加されますが、手動で構成したプロジェクトでは明示的に追加する必要があります。バージョンを固定する場合は、Xamarin のパッチリビジョンを含む利用可能な最高バージョン(例:1.7.1 ではなく 1.7.1.3)を選んでください。.X サフィックスは Xamarin バインディングレベルの更新を示し、重要な推移的依存関係の修正が含まれています。サフィックスのない形式には既知の Xamarin.AndroidX.SavedState の不整合があり、CS7069: Reference to type 'ISavedStateRegistryOwner' ... could not be found でビルドに失敗します。
  • AndroidManifest.xml の <application> では、Theme.AppCompat の派生テーマを使用する必要があります。 <application> 要素に android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"(または別の Theme.AppCompat 派生テーマ)を追加してください。これがないと、起動直後に AppCompatActivity が java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity をスローします。dotnet new android はこの属性をデフォルトで設定しないため、BarcodeCapture の統合時に明示的に追加する必要があります。
  • 新しいプロジェクトを作成する場合は、csproj/マニフェスト/リソースを手書きするより、dotnet new android -o MyApp を使用してください。ビルド可能なひな形が生成され、正しい OutputType、strings.xml、ランチャーアイコンが含まれます。これらはすべて、このスキルで参照するマニフェストに必要です。<OutputType>Library</OutputType> を指定した手書きの csproj では、インストール可能な .apk ではなく .aar が気付かないうちにビルドされます。
  • SDK 8.0 以降では、明示的な初期化が必要です。 Android.App.Application を継承するクラスに [Application] を付け、Scandit のコードを実行する前に OnCreate() で ScanditCaptureCore.Initialize() と ScanditBarcodeCapture.Initialize() を呼び出してください。これを行わないと、SDK の DI コンテナーに登録がなく、最初の DataCaptureView.Create/BarcodeCapture.Create 呼び出し時に起動直後のクラッシュが発生します。6.x/7.x では不要です。これらのメジャーバージョンでは自動的に初期化されていました。MainApplication.cs のテンプレート全文については、統合ガイドを参照してください。

インテントルーティング

ユーザーのリクエストに基づいて、回答する前に適切なリファレンスファイルを読み込んでください。

  • BarcodeCapture を一から統合する、設定を構成する、フィードバックをカスタマイズする、ビューファインダーを追加する、スキャンを処理する、またはスキャン後に非同期処理を行う場合(例:「.NET Android アプリに BarcodeCapture を追加する」、「C# でバーコードスキャンを設定する」、「net-android で BarcodeCapture を使うには」、「重複スキャンをフィルターする」、「ビープ音を抑制する」、「ビューファインダーを追加する」、「バーコードを検索している間、スキャンを無効にする」)→ references/integration.md を読み、そこに記載された手順に従ってください。
  • 既存の BarcodeCapture 統合を移行またはアップグレードする場合(例:「v6 から v7 にアップグレードする」、「BarcodeCapture を移行する」、「Scandit .NET SDK を v8 に更新する」、「SDK バージョン間の変更点を知りたい」)→ references/migration.md を読み、そこに記載された手順に従ってください。
  • サードパーティ製バーコードスキャナーを BarcodeCapture に置き換える場合(例:「ZXing.Net.Mobile スキャナーを BarcodeCapture に置き換える」、「ZXing.Net から Scandit に移行する」、「[library] から BarcodeCapture に切り替える」)→ references/third-party-migration.md を読み、そこに記載された手順に従ってください。

API 使用ポリシー

以下の Scandit リファレンスに明示的に記載されている API のみを使用してください。メソッドシグネチャ、パラメーター、プロパティ名を捏造したり、推測したりしないでください。API が存在するか、またはどのように呼び出すか不明な場合、あるいはコンパイルエラーが発生した場合は、回答する前に該当するリファレンスページを取得してください。ユーザーに自分でドキュメントを確認するよう求めないでください。回答後は、ユーザーがさらに詳しく調べられるよう、必ず関連リンクを含めてください。

ドキュメントの URL を組み立てたり、推測したりしないでください。 特定のクラスまたはプロパティの API ページが必要な場合:

  1. まず、すでに取得したページにそのページへの直接リンクがあるか確認してください。トピックページには関連する API シンボルへの直接リンクがあります。取得時のプロンプトでは、必ずリンクも含めるようにしてください。
  2. 直接リンクが見つからない場合は、API インデックスを取得し(下の表の Full API reference を参照)、そこから実際のリンクを抽出して、そのリンク先を参照してください。

URL の構造は異なる場合があります(例:api/ui/ サブディレクトリ)。推測すると 404 エラーにつながります。

ライセンスキー

スキャンには Scandit ライセンスキーが必要です。このスキルのライセンス製品は native、ライセンスプラットフォームは android です。

以下の手順を順番に実行してください。MCP の利用を理由にユーザーの作業を妨げてはいけません。

  1. Scandit MCP サーバーが接続されている — 製品に native、プラットフォームに android を指定して ensure_scanner_setup を呼び出し、続いて get_license_env_command が返すコマンドを実行して、キーをプロジェクトの .env に書き込みます。チャットではマスクしたプレビューのみを表示してください。キー全体を表示してはいけません。

  2. 接続されていない — 一度だけ接続するよう提案し、その後ステップ 1 に進んでください。

    • Claude Code:claude mcp add --transport http scandit https://ssl.scandit.com/mcp
    • Cursor:~/.cursor/mcp.json に {"mcpServers": {"scandit": {"url": "https://ssl.scandit.com/mcp"}}} を追加
    • VS Code:MCP ユーザー設定に {"servers": {"scandit": {"type": "http", "url": "https://ssl.scandit.com/mcp"}}} を追加

    認証はブラウザー経由のため、ヘッドレス環境または CI ではサポートされていません。サーバーが発行するのは トライアルキーのみです。本番用ライセンスの作成、失効、変更は行いません。

  3. ユーザーが辞退した場合、または 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 リファレンス全体BarcodeCapture API(.NET Android)

このスキルが対象とする API

公式 RST ドキュメントで :available: dotnet.android が指定されているすべてのクラスについては、references/integration.md で説明しています。

  • BarcodeCapture — Create(context, settings)、Create(settings)、Enabled、PointOfInterest、Feedback、BarcodeCaptureLicenseInfo、Context、静的な RecommendedCameraSettings、ApplySettingsAsync、AddListener / RemoveListener、イベント BarcodeScanned / SessionUpdated。
  • BarcodeCaptureSettings — Create()、EnableSymbology、EnableSymbologies(ICollection<Symbology>)、EnableSymbologies(CompositeType)、GetSymbologySettings、EnabledSymbologies、EnabledCompositeTypes、CodeDuplicateFilter、LocationSelection、BatterySaving、ScanIntention、SetProperty / GetProperty<T> / TryGetProperty<T>。
  • BarcodeCaptureFeedback — 静的な DefaultFeedback、Success。
  • BarcodeCaptureSession — NewlyRecognizedBarcode、NewlyLocalizedBarcodes、FrameSequenceId、Reset()。
  • IBarcodeCaptureListener — OnObservationStarted、OnObservationStopped、OnBarcodeScanned、OnSessionUpdated。
  • BarcodeCaptureEventArgs — BarcodeCapture、Session、FrameData。
  • BarcodeCaptureLicenseInfo — LicensedSymbologies。
  • BarcodeCaptureOverlay — Create(barcodeCapture, view)、Create(barcodeCapture)、Brush、静的な DefaultBrush、Viewfinder、ShouldShowScanAreaGuides、SetProperty。

コメント