2

ユーザーがQRコードのコンテンツを確認し、読み取り結果に応じて何かを実行できるAndroidアプリを開発しています。

パフォーマンスを向上させるために、次の 2 つの方法を実装したいと思います。

  • onClickFocus (これにより、ユーザーは画面がクリックされたときにカメラの焦点を合わせることができます)
  • フラッシュのオン/オフの切り替え (ユーザーがフラッシュのオン/オフを切り替えることができます)

私は掘り下げて、カメラとフラッシュを管理するためにCameraas オブジェクト自体を管理できる必要があることを理解しました。

そして、ここから悪夢が始まります。

次のコードを使用して、カメラの結果を表示し、QR コードを追跡しています。

    import android.app.FragmentTransaction;
import android.content.Context;


import android.os.Bundle;
import android.os.Vibrator;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.SparseArray;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;

import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.barcode.Barcode;
import com.google.android.gms.vision.barcode.BarcodeDetector;
import java.io.IOException;



public class MainReadActivity extends AppCompatActivity {


    public SurfaceView cameraView;
    private TextView barcodeInfo;
    public BarcodeDetector barcodeDetector;
    public CameraSource cameraSource;
    public Vibrator v;
    public String textInfo;
    public DrawerLayout mDrawerLayout;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_read);
        v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout_main);


        getSupportFragmentManager().findFragmentById(R.id.drawer_layout_main);

        cameraView = (SurfaceView) findViewById(R.id.camera_view);


        //barcodeInfo = (TextView) findViewById(R.id.code_info);

        barcodeDetector = new BarcodeDetector.Builder(this)
                .setBarcodeFormats(Barcode.QR_CODE)
                .build();


        cameraSource = new CameraSource.Builder(this, barcodeDetector).build();



        cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {

            @Override
            public void surfaceCreated(SurfaceHolder holder) {


                try {
                    cameraSource.start(cameraView.getHolder());
                } catch (IOException ie) {
                    Log.e("CAMERA SOURCE", ie.getMessage());
                }

            }


            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            }

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                cameraSource.stop();
            }

        });


        barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {

            @Override
            public void release() {

            }


            @Override
            public void receiveDetections(Detector.Detections<Barcode> detections) {
                final SparseArray<Barcode> barcodes = detections.getDetectedItems();

                if (barcodes.size() != 0) {


                    new Runnable() {    // Use the post method of the TextView
                        public void run() {


                            v.vibrate(500);
                          // textInfo = barcodes.valueAt(0).displayValue;

                            MyFragmentDialog newf = new MyFragmentDialog();
                            FragmentTransaction transaction = getFragmentManager().beginTransaction();
                            transaction.replace(R.id.fragment_container, newf);

                            transaction.addToBackStack("tag");
                            transaction.commit();

                        }
                    };
                }
            }

        });







    }

    public void onBackPressed() {
        // do nothing
    }
}

そのため、CameraSource から Camera にアクセスする必要があります (そうですか!?) それができなくなったら、setFocusMode メソッドを使用できる GoogleSamples の git からこのCameraSourceクラスを使用しようとしましたが、残念ながら私はそうではありませんでした成功。

API 22 はCamera と CameraPreferencesをサポートしなくなったため、API 21 も使用しようとしました。

これは私だけの問題ではないと確信していますが、それを修正する方法を見つけることができませんでした.

誰でも助けることができますか?

修繕:

この CameraSource を使用するだけです (github.com/googlesamples/android-vision/blob/master/visionSamples/barcode-reader/app/src/main/java/com/google/android/gms/samples/vision/barcodereader/ui/camera /CameraSource.java) . ええ、私はそれを提案しました...しかし、今回は私の問題を解決しました!したがって、これを使用する場合は、コンパイルが次のようになっていることを確認してください。

compile 'com.google.android.gms:play-services:8.1.0'
4

3 に答える 3

0

ここで回答: Google Vision API サンプル: CameraSource を取得してフォーカスを合わせる

オートフォーカスする .setAutoFocusEnabled(true)にはCameraSource.Builder()

于 2016-04-16T20:40:09.590 に答える
0

私はこのライブラリを使用していますが、非常にうまく機能し、実装も簡単です

https://github.com/dm77/barcodescanner

于 2016-04-16T20:30:24.693 に答える