barcode-capture-net-android について
非 MAUI の .NET for Android プロジェクトで Scandit BarcodeCapture を扱うコーディングエージェント向けスキルです。統合や移行の質問を参照資料に振り分け、記憶に頼らず API を確認する方針を示します。
主な機能
- 01.NET Android BarcodeCapture API の案内
- 02統合・アップグレード・移行の振り分け
- 03バージョン別 API とライフサイクルの注意点
- 04文書化された API の確認方針
- 05Scandit ライセンスキー設定の案内
活用シーン
- 01.NET Android アプリへのバーコードスキャン追加
- 02既存の Scandit 統合のアップグレード
- 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.mdmigration.mdthird-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 ページが必要な場合:
- まず、すでに取得したページにそのページへの直接リンクがあるか確認してください。トピックページには関連する API シンボルへの直接リンクがあります。取得時のプロンプトでは、必ずリンクも含めるようにしてください。
- 直接リンクが見つからない場合は、API インデックスを取得し(下の表の Full API reference を参照)、そこから実際のリンクを抽出して、そのリンク先を参照してください。
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:
~/.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 ではサポートされていません。サーバーが発行するのは トライアルキーのみです。本番用ライセンスの作成、失効、変更は行いません。
- 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 リファレンス全体 | 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。