0

我有一个应用程序,并在其主要活动有一个按钮,点击它在屏幕中心打开一个片段。
我有工作代码,打开相机在中心作为解释,但我希望简单的相机视图更改为qr scanner.I现在已添加zxing库依赖项。以及如何在打开相机时使其工作?不能安排代码。 (在创建视图中)。
任何帮助将是伟大的请。如何用qr码扫描仪打开相机?

//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> 
+0

您可能会发现这[链接](https://www.spaceotechnologies.com/qr-code-android-using-zxing-library/)有用。 –

+0

你可以改变CameraConfigurationUtils文件在斑马线库 –

回答

0

我有按钮,扫描QR码和访问联系人号码。

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); 

    } } 

并且在不活动结果中解析该值。

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); 

          } 
0

@Nimra更好,你可以使用自定义库,对QR码scaning很多新的lib在github上,使用QReader库简单,最好找到。

QReaderLib Github Link

实施,

在摇篮,

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" 
    /> 

设置SurfaceView和QREader中的onCreate()

// 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(); 

} 
+0

QReader.Builder不能解析符号建设者!为什么? –

+0

我想你新台币在dependices添加库, –

+0

我已经加入其中U粘贴在这里的依赖。在我的gra 012 –

0

在我的代码这个简单的改变以及工作在我的代码来打开QR扫描。以下是代码。如果任何机构需要。

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

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