如何使用二维码扫描仪打开相机?

时间:2017-04-27 11:15:27

标签: android android-fragments android-camera android-canvas zxing

我有一个应用程序,在其主要活动上有一个按钮,单击该按钮可在屏幕中央打开一个片段。
我有工作代码在中心打开相机,但我希望简单的相机视图更改为qr扫描仪。我现在已经添加了zxing库依赖项。以及打开相机时如何使其工作?无法安排代码。 (在oncreate视图中)。
任何帮助都会很棒。

//method in scan.java
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_scan, container, false);

        if(checkCameraHardware(getActivity().getApplicationContext())){
zXingScannerView  = new ZXingScannerView(getActivity().getApplicationContext());

            //zXingScannerView.startCamera(); I tried something like this

            mCamera = Camera.open();
            mCamera.setDisplayOrientation(90);
            Camera.Parameters params = mCamera.getParameters();
           params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
            mCamera.setParameters(params);
            mPreview = new CameraPreview(this.getActivity(), mCamera);


            //container.addView(mPreview);--->Remove this line
            //Add this line

            FrameLayout preview =(FrameLayout)view.findViewById(R.id.camera_preview);
            preview.addView(mPreview);
        }
        // Inflate the layout for this fragment
        return view;
    }
//fragment_scan.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    tools:context="layout.scan"
    android:layout_centerInParent="true"
android:layout_marginTop="@dimen/nav_header_height"
android:layout_marginBottom="@dimen/fab_margin"
    android:layout_marginLeft="@dimen/fab_margin"

    >
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/camera_preview"
    >


    </FrameLayout>
</LinearLayout>

3 个答案:

答案 0 :(得分:0)

我有按钮扫描二维码并访问联系电话。

    contacts.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            enable = "contacts";
            pickBankData(enable);
        }
    });
 private void pickBankData(String val) {

 if (enable.equals("scanqr")) {
        IntentIntegrator integrator = new IntentIntegrator(this);
        integrator.setPrompt("Scan a Qrcode");
        integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
        integrator.setCameraId(0);  // Use a specific camera of the device
        integrator.setBeepEnabled(false);
        integrator.setBarcodeImageEnabled(true);
        integrator.initiateScan();          //  accno.setEnabled(false);
        // ifsc.setEnabled(false);

    } }

并且在onactivity结果中解析该值。

 switch (requestCode) {
        case IntentIntegrator.REQUEST_CODE:
            IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode,
                    resultCode, data);
            if (scanResult == null) {
                return;
            }
            final String result = scanResult.getContents();
            if (result != null) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        //  tx.setText(result);
                        try {
                            String qrInputText = result;
                            String[] array = qrInputText.split(":", -1);
                            String usertype = array[0];
                            String mobilenumber = array[1];

                            String MMid = array[2];
                            String Name = array[3];
                            if (mobilenumber.equals("")) {

                            }
                            if (enable.equals("scanqr")) {
                                nameedit.setText(Name);
                                mobnum.setText(mobilenumber);

                            }

答案 1 :(得分:0)

@Nimra你可以使用自定义Lib,对于在github中找到的新lib的qr代码扫描很多,使用QReader Lib简单而且最好。

QReaderLib Github Link

实施,

在Gradle中,

compile 'com.github.nisrulz:qreader:{latest version}'//start from 1.0.4 version

将SurfaceView添加到布局

  <SurfaceView
  android:id="@+id/camera_view"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_above="@+id/info"
  />

在onCreate()

中设置SurfaceView和QREader
 // QREader
private SurfaceView mySurfaceView;
private QREader qrEader;
..

@Override
protected void onCreate(final Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ..
  ..

  // Setup SurfaceView
  // -----------------
  mySurfaceView = (SurfaceView) findViewById(R.id.camera_view);

  // Init QREader
  // ------------
  qrEader = new QREader.Builder(this, mySurfaceView, new QRDataListener() {
    @Override
    public void onDetected(final String data) {
      Log.d("QREader", "Value : " + data);
      text.post(new Runnable() {
        @Override
        public void run() {
          text.setText(data);
        }
      });
    }
  }).facing(QREader.BACK_CAM)
      .enableAutofocus(true)
      .height(mySurfaceView.getHeight())
      .width(mySurfaceView.getWidth())
      .build();

}

答案 2 :(得分:0)

我的代码中的这个简单更改很适合在我的代码中打开qr扫描程序。下面是代码。如果需要任何机构。

zXingScannerView  = new ZXingScannerView(getActivity().getApplicationContext());
zXingScannerView.startCamera();

FrameLayout preview =(FrameLayout)view.findViewById(R.id.camera_preview);
preview.addView(zXingScannerView);