如何在 Google 示例 Android 代码中 return 来自 OCR Detector.Processor 的数据

How to return data from OCR Detector.Processor in Google sample Android code

在此sample Android program中,设备的摄像头用于通过com.google.android.gms:play-services-vision库执行光学字符识别。

visionSamples\ocr-codelab\ocr-reader-complete\app\src\main\java\com\google\android\gms\samples\vision\ocrreader\OcrDetectorProcessor.receiveDetections() 中,我能够看到使用日志记录识别的文本:

Log.d("OcrDetectorProcessor", "Text detected! " + item.getValue());

以上过程由OcrCaptureActivity启动:

TextRecognizer textRecognizer.setProcessor(new OcrDetectorProcessor(mGraphicOverlay));
CameraSource mCameraSource = new CameraSource.Builder(getApplicationContext(), textRecognizer)/* snip */.build();
CameraSourcePreview mPreview = (CameraSourcePreview) findViewById(R.id.preview);
mPreview.start(mCameraSource, mGraphicOverlay);

所以我们看到上面的一组 "stuff" 不是启动 activity 的典型方法。

这个问题是关于如何将 OcrDetectorProcessor 返回 OcrCaptureActivity的结果。

我尝试将 onActivityResult() 添加到 OcrCaptureActivity 但它没有触发:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.v(TAG, ">>>>>>> OnActivityResult intent: " + data);
}

因为 OcrDetectorProcessor 不是 Activity,我不能简单地创建一个新的 Intent 并使用 setResult() 方法。

有一个 OcrDetectorProcessor.release() 方法,它在正确的时间运行(当按下 Android 后退按钮时),但我不确定如何让它与父进程通信.

一般你需要做的是保存对OcrDetectorProcessor的引用,然后编写一个数据检索方法并从OcrCaptureActivity调用它。

所以对您的 'onCreate()' 进行此更改:

//TextRecognizer textRecognizer.setProcessor(new OcrDetectorProcessor(mGraphicOverlay));
mDetectorProcessor = new OcrDetectorProcessor(mGraphicOverlay);
TextRecognizer textRecognizer.setProcessor(mDetectorProcessor);

然后在你的OcrDetectorProcessorclass中添加一个数据检索方法,returns你选择的实例变量:

public int[] getResults() {
    return new int[] {mFoundResults.size(), mNotFoundResults.size()};
}

然后把这个方法添加到OcrCaptureActivity():

@Override
public void onBackPressed() {
    int[] results = mDetectorProcessor.getResults();
    Log.v(TAG, "About to finish OCR.  Setting extras.");
    Intent data = new Intent();
    data.putExtra("totalItemCount", results[0]);
    data.putExtra("newItemCount", results[1]);
    setResult(RESULT_OK, data);
    finish();
    super.onBackPressed(); // Needs to be down here
}