ウィンドウスキャンは、従来の標準 UI を使用する機能です。複数コード認識をサポートするフルスクリーンスキャン機能を使用するには、mPaaS ベースラインを 10.1.68.33 以降にアップグレードする必要があります。
標準 UI でのスキャン機能の使用
フルスクリーンスキャン
スキャンが成功した後も終了せずに連続スキャンを行うには、次のコードを使用します。
ScanRequest scanRequest = new ScanRequest();
MPScan.startMPaasScanFullScreenActivity(this, scanRequest, new MPScanCallbackAdapter() {
@Override
public boolean onScanFinish(Context context, MPScanResult mpScanResult, final MPScanStarter mpScanStarter) {
new android.app.AlertDialog.Builder(context)
.setMessage(mpScanResult != null ? mpScanResult.getText() : "コードが検出されませんでした")
.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mpScanStarter.restart();
}
})
.create()
.show();
// false を返すと、コールバックが消費されていないことを示します。コールバックは次のスキャンで再度呼び出されます。
return false;
}
});MPScanCallbackAdapter の他のメソッドをオーバーライドして、他のイベントをリッスンします。
MPScan.startMPaasScanFullScreenActivity(this, scanRequest, new MPScanCallbackAdapter() {
@Override
public boolean onScanFinish(final Context context, MPScanResult mpScanResult, final MPScanStarter mpScanStarter) {
return true;
}
@Override
public boolean onScanError(Context context, MPScanError error) {
// スキャンエラー。
return super.onScanError(context, error);
}
@Override
public boolean onScanCancel(Context context) {
// スキャンがキャンセルされました。
return super.onScanCancel(context);
}
});フルスクリーンスキャン機能を開始する前に、次のコードに示すように起動パラメーターを設定します。
ScanRequest scanRequest = new ScanRequest();
// プロンプトテキストを設定します。
scanRequest.setViewText("プロンプトテキスト");
// フラッシュライトをオンにするためのプロンプトテキストを設定します。
scanRequest.setOpenTorchText("フラッシュライトをオンにする");
// フラッシュライトをオフにするためのプロンプトテキストを設定します。
scanRequest.setCloseTorchText("フラッシュライトをオフにする");
// スキャン認識タイプを設定します。
// この設定は直接スキャンにのみ有効で、フォトアルバムからの画像認識には適用されません。
scanRequest.setRecognizeType(
ScanRequest.RecognizeType.QR_CODE, // QR コード
ScanRequest.RecognizeType.BAR_CODE, // バーコード
ScanRequest.RecognizeType.DM_CODE, // DM コード
ScanRequest.RecognizeType.PDF417_Code // PDF417 コード
); // 設定しない場合、デフォルトで最初の 3 種類が認識されます。
// フォトアルバムボタンを非表示にします。
scanRequest.setNotSupportAlbum(true);
// 複数コードスキャン用のマーカー画像を設定します。
scanRequest.setMultiMaMarker(R.drawable.green_arrow);
// 複数コードスキャン用のプロンプトテキストを設定します。
scanRequest.setMultiMaTipText("緑の矢印をタップしてコードを選択してください");
// 単一コードを選択した後のドットの色を設定します。
scanRequest.setMaTargetColor("#32CD32");
// AI を有効にして小さなコードを認識し、自動的にズームインします。この機能はベースライン 10.2.3 以降でのみサポートされており、Scan AI コンポーネントの統合が必要です。
scanRequest.setEnableAI(true);
// 遅延プロンプトテキストを設定します。この機能はベースライン 10.2.3 以降でのみサポートされています。
scanRequest.setDelayTipText("x 秒後にトーストがポップアップ表示されます");
// プロンプトの遅延時間をミリ秒単位で設定します。この機能はベースライン 10.2.3 以降でのみサポートされています。
scanRequest.setDelayTipTime(5000);
// フォトアルバムから複数のコード (最大 4 つ) の認識を有効にします。この機能はベースライン 10.2.3 以降でのみサポートされています。
scanRequest.setEnableAlbumMultiCode(true);
// カスタム権限リクエストフローを設定します。
scanRequest.setPermissionDelegate(new PermissionDelegate() {
/**
* 権限リクエストを開始します。ここで独自の権限リクエストのインタラクションを実装したり、説明を提供したりできます。
* 注意:
* 1. 独自のロジックを処理した後、権限をリクエストする必要があります。そうしないと、プロセスがブロックされます。
* 2. ユーザーが権限を拒否した場合、`onPermissionDenied` と `MPScanCallbackAdapter.onScanError` が呼び出されます。
* `MPScanCallbackAdapter.onScanError` は、権限リクエストの失敗を処理するためのデフォルト実装を提供します。このメソッドをオーバーライドしてエラーを処理できます。
* @param fragment スキャンページ。
* @param requestCode 1: カメラ権限。
* @param permissions リクエストされた権限。
*
*/
@Override
public void onRequestPermission(Fragment fragment, final int requestCode, final String[] permissions) {
// カメラ権限を処理します。
if(requestCode == 1){
// ビジネスロジックを処理します。
showPermissionTipDialog();
}
// 権限リクエストを開始するには、これを呼び出す必要があります。
fragment.requestPermissions(permissions, requestCode);
}
/**
* 権限が正常に付与されたときのコールバック。
*/
@Override
public void onPermissionGranted(Fragment fragment, int requestCode, String[] permissions, int[] grantResults) {
dismissPermissionTipDialog();
}
/**
* 権限が拒否されたときのコールバック。
*/
@Override
public void onPermissionDenied(Fragment fragment, int requestCode, String[] permissions, int[] grantResults) {
dismissPermissionTipDialog();
}
});ウィンドウスキャン
ウィンドウスキャン機能を使用する場合、次のコードに示すように起動パラメーターを設定します。
ScanRequest scanRequest = new ScanRequest();
// スキャンページの UI スタイルを設定します。
scanRequest.setScanType(ScanRequest.ScanType.QRCODE); // QR コードスタイル
scanRequest.setScanType(ScanRequest.ScanType.BARCODE); // バーコードスタイル、デフォルト
// スキャンインターフェイスのタイトルを設定します。
scanRequest.setTitleText("標準スキャン");
// スキャンウィンドウの下に表示されるプロンプトテキストを設定します。
scanRequest.setViewText("プロンプトテキスト");
// フラッシュライトをオンにするためのプロンプトテキストを設定します。ベースライン 10.1.60 以降でのみサポートされています。
scanRequest.setOpenTorchText("フラッシュライトをオンにする");
// フラッシュライトをオフにするためのプロンプトテキストを設定します。ベースライン 10.1.60 以降でのみサポートされています。
scanRequest.setCloseTorchText("フラッシュライトをオフにする");
// スキャン認識タイプを設定します。ベースライン 10.1.60.6+ および 10.1.68.2+ でのみサポートされています。
// この設定は直接スキャンにのみ有効で、フォトアルバムからの画像認識には適用されません。
scanRequest.setRecognizeType(
ScanRequest.RecognizeType.QR_CODE, // QR コード
ScanRequest.RecognizeType.BAR_CODE, // バーコード
ScanRequest.RecognizeType.DM_CODE, // DM コード
ScanRequest.RecognizeType.PDF417_Code // PDF417 コード
); // 設定しない場合、デフォルトで最初の 3 種類が認識されます。
// 透明なステータスバーを設定します (Android 4.4+ で有効)。ベースライン 10.1.68.15+ でのみサポートされています。
scanRequest.setTranslucentStatusBar(true);
// フォトアルバムボタンを非表示にします。ベースライン 10.1.68.22+ でのみサポートされています。
scanRequest.setNotSupportAlbum(true);カスタム UI でのスキャン機能の使用
詳細については、コードサンプルをご参照ください。
アップグレードのためのカスタム UI の適応
バージョン 10.2.3.35 以降、Scan SDK は
MPCustomScanViewクラスと関連インターフェイスを提供し、カスタム UI を実装するためのMPScannerを置き換えます。MPScannerと比較して、MPCustomScanViewソリューションは、カメラ管理、コード認識、複数コード認識、画像ズーム、コード結果の解析など、コアスキャンサービスプロセスをカプセル化します。これにより、これらの基盤となる操作を管理することなく、MPCustomScanViewでのカスタム UI の実装に集中できます。MPScannerを引き続き使用できますが、メンテナンスは終了しており、複数コード認識など、フルスクリーン UI と一貫性のある機能アップデートは提供されません。適切なタイミングでMPCustomScanViewソリューションに切り替えてカスタム UI を実装することを推奨します。このソリューションは、将来の機能アップグレードにおいてもフルスクリーン UI との一貫性を保ちます。バージョン 10.1.68.5 および 10.1.60.11 以降、Scan SDK には
MPScannerクラスと関連インターフェイスが含まれています。これらは、BQCScanCallbackやMaScanCallbackなどの従来のインターフェイスを置き換え、カスタムスキャンを実現します。従来のインターフェイスと比較して、MPScannerは完全なカプセル化、シンプルな API、および周囲光が不十分な場合のコールバックなど、より多くの機能のサポートを提供します。まだBQCScanCallbackやMaScanCallbackなどの従来のインターフェイスを使用している場合、古いバージョンからアップグレードする際に、以下の変更に適応する必要がある場合があります。バージョン 10.1.68.22:
MaScanCallback、BQCScanCallback、およびIOnMaSDKDecodeInfoクラスに新しいインターフェイスが追加されました。これらのインターフェイスに空の実装を提供し、MaScanCallback.onMaCodeInterceptorメソッドが `false` を返すようにしてください。バージョン 10.1.60.6:
BQCScanCallbackクラスに新しいインターフェイスが追加されました。これらのインターフェイスに空の実装を提供してください。バージョン 10.1.60:
BQCScanCallbackクラスに新しいインターフェイスが追加されました。これらのインターフェイスに空の実装を提供してください。バージョン 10.1.20:
MaScanCallbackクラスのインターフェイスがvoid onResultMa(MaScanResult maScanResult)からvoid onResultMa(MultiMaScanResult multiMaScanResult)に変更されました。MaScanResultは次のように取得できます。MaScanResult maScanResult = multiMaScanResult.maScanResults[0];
カスタム UI API リファレンス
MPCustomScanView
MPCustomScanView を使用するには、Activity クラスを MPaasToolsCaptureActivity から継承させます。次に、getCustomScanView メソッドを実装して、カスタムの MPCustomScanView を返します。
public class MyScanActivity extends MPaasToolsCaptureActivity {
private MyScanView myScanView;
@Override
protected MPCustomScanView getCustomScanView() {
myScanView = new MyScanView(this);
// 詳細については、GitHub のコードサンプルをご参照ください。
return myScanView;
}
}MPCustomScanView で以下のメソッドを実装または呼び出すことができます。
/**
* スキャン開始時のコールバック。
*/
public void onStartScan();
/**
* カメラからの最初のフレームが表示されたときのコールバック。
*
* このメソッドとスキャン開始コールバックの実行順序は保証されません。
*/
public void onPreviewShow();
/**
* スキャン停止時のコールバック。
*/
public void onStopScan();
/**
* カメラフレームのグレースケール値のコールバック。
* スキャン中にフレームごとに呼び出されます。
*
* @param gray 平均グレースケール値。周囲の輝度を測定するために使用できます。
*/
public void onGetAvgGray(int gray);
/**
* スキャン成功時 (コードが認識されたとき) のコールバック。
*
* @param context 現在のコンテキスト。
* @param list 認識されたコードの結果。
*/
public abstract void onScanFinished(Context context, List<MPScanResult> list);
/**
* スキャン失敗時のコールバック。
*
* @param context 現在のコンテキスト。
* @param error 失敗の理由。
*/
public abstract void onScanFailed(Context context, MPScanError error);
/**
* カメラのオープンに失敗したときのコールバック。
*/
public void onCameraOpenFailed();
/**
* フラッシュライトのオン/オフを切り替えます。
*
* @return このメソッドが呼び出された後のフラッシュライトの状態。
*/
public boolean switchTorch();
/**
* ファイルからコードを認識します。
*
* @param path ファイルパス。
* @return 認識されたコードの結果。
*/
public List<MPScanResult> scanFromPath(String path);MPScanResult
/**
* 認識された結果の文字列。
*/
private String text;
/**
* 認識されたコードのタイプ。
*/
private MPRecognizeType mpRecognizeType;
/**
* 認識されたコードの重心座標。
*/
private Point centerPoint;カスタム権限リクエストフロー
権限リクエストフローをカスタマイズするには、PermissionDelegate インターフェイスを実装します。
public class MyScanActivity extends MPaasToolsCaptureActivity implements PermissionDelegate{
/**
* 権限リクエストを開始します。ユーザーはここで独自の権限リクエストのインタラクションを実装したり、説明を提供したりできます。
* 注意:独自のロジックを処理した後、権限をリクエストする必要があります。そうしないと、プロセスがブロックされます。
* @param fragment スキャンページ。
* @param requestCode 1: カメラ権限。
* @param permissions リクエストされた権限。
*/
@Override
public void onRequestPermission(Fragment fragment, final int requestCode, final String[] permissions) {
// カメラ権限を処理します。
if(requestCode == 1){
// ビジネスロジックを処理します。
showPermissionTipDialog();
}
// 権限リクエストを開始するには、これを呼び出す必要があります。
fragment.requestPermissions(permissions, requestCode);
}
/**
* 権限が正常に付与されたときのコールバック。
*/
@Override
public void onPermissionGranted(Fragment fragment, int requestCode, String[] permissions, int[] grantResults) {
dismissPermissionTipDialog();
}
/**
* 権限が拒否されたときのコールバック。
*/
@Override
public void onPermissionDenied(Fragment fragment, int requestCode, String[] permissions, int[] grantResults) {
dismissPermissionTipDialog();
}
}MPScanner (非推奨)
カスタム UI に関連する設定は次のとおりです。
/**
* カメラのコンテンツを表示する View を設定します。
* `{@link MPScanListener}` の `onConfiguration` メソッドでこれを呼び出します。
*
* @param textureView カスタムスキャンページの TextureView。
*/
public void setDisplayView(TextureView textureView);
/**
* スキャン認識のエリアを設定します。
*
* @param rect 認識エリア。
*/
public void setScanRegion(Rect rect);
/**
* スキャンリスナーを設定します。
*/
public void setMPScanListener(MPScanListener mpScanListener);
/**
* 画像のグレースケール値のリスナーを設定します。
*/
public void setMPImageGrayListener(MPImageGrayListener mpImageGrayListener);
/**
* Camera オブジェクトを取得します。
*
* @return Camera オブジェクト。
*/
public Camera getCamera();
/**
* 認識するコードの種類を設定します。
* これは直接スキャンにのみ有効で、ビットマップからのコード認識には適用されません。
*
*
* @param recognizeTypes バーコードは BAR_CODE、QR コードは QR_CODE、DM コードは DM_CODE、PDF417 コードは PDF417_CODE。
* 設定しない場合、デフォルトで最初の 3 種類が認識されます。
*/
public void setRecognizeType(MPRecognizeType... recognizeTypes);カスタム UI に関連するスキャン操作は次のとおりです。
/**
* カメラを開き、スキャンを開始します。
*
* ページに初めて入るとき、またはカメラがオフのときにこれを呼び出します。
*/
public void openCameraAndStartScan();
/**
* カメラを閉じてスキャンを停止します。
*/
public void closeCameraAndStopScan();
/**
* スキャンを開始します。
*
* これはカメラの状態を変更しません。有効にするには、カメラがオンのときに呼び出す必要があります。
*/
public void startScan();
/**
* スキャンを停止します。
*
* これはカメラの状態を変更しません。
*/
public void stopScan();
/**
* ビットマップからコードを認識します。
*
* @param bitmap 認識するビットマップ。
* @return スキャン結果。
*/
public MPScanResult scanFromBitmap(Bitmap bitmap);その他:
/**
* フラッシュライトのオン/オフを切り替えます。
*
* @return メソッドが呼び出された後のフラッシュライトがオンかどうか。
*/
public boolean switchTorch();
/**
* フラッシュライトをオンにします。
*/
public void openTorch();
/**
* フラッシュライトをオフにします。
*/
public void closeTorch();
/**
* デフォルトのビープ音を再生します。
*/
public void beep();
/**
* リソースを解放します。
*
* onDestroy でこのメソッドを呼び出します。
*/
public void release();MPScanListener (非推奨)
/**
* スキャンパラメーターの構成が完了したときに呼び出されます。
*/
void onConfiguration();
/**
* スキャンと検出プロセスが開始されたときに呼び出されます。
*/
void onStart();
/**
* 検出が成功したときに呼び出されます。
*
* @param result 検出結果。
*/
void onSuccess(MPScanResult result);
/**
* 検出エラーが発生したときに呼び出されます。
*
* @param error エラー。
*/
void onError(MPScanError error);MPImageGrayListener (非推奨)
/**
* 画像の平均グレースケール値を取得します。
*
* 通常の範囲は約 50 から 140 です。
* グレースケール値がこの範囲外の場合、通常は周囲の輝度が低すぎるか高すぎることを示します。この情報を使用して、ユーザーにフラッシュライトのオン/オフを促すことができます。
* 注意:このメソッドは認識プロセス中に継続的に呼び出されます。
*
* @param gray 画像の平均グレースケール値。
*/
void onGetImageGray(int gray);