2017-03-23 1 views
1

Je travaille sur le scanner de codes à barres en utilisant ZxingScannerView.J'ai besoin d'éteindre le flash pendant la numérisation mais le composant de la caméra est obsolète, donc y a-t-il un autre moyen d'y parvenir? pour désactiver flash zxingscanner.Thanks à l'avanceComment éteindre le flash de manière permanente dans la vue du scanner Zxing?

import android.Manifest; 
    import android.app.Activity; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.content.pm.PackageManager; 
    import android.hardware.Camera; 
    import android.os.Bundle; 
    import android.support.v4.app.ActivityCompat; 
    import android.support.v4.content.ContextCompat; 
    import android.support.v7.app.AppCompatActivity; 
    import android.util.Log; 
    import android.view.Gravity; 
    import android.view.View; 
    import android.view.ViewGroup.LayoutParams; 
    import android.widget.FrameLayout; 
    import android.widget.ImageView; 
    import android.widget.Toast; 

    import com.google.zxing.Result; 

import me.dm7.barcodescanner.zxing.ZXingScannerView; 

public class WorkOut extends AppCompatActivity implements ZXingScannerView.ResultHandler { 

    Integer response = 0; 
    int currentIndex = 0; 

    private ZXingScannerView mScannerView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mScannerView = new ZXingScannerView(this); 
     Camera camera =Camera.open(); 

     Camera.Parameters p; 
     p = camera.getParameters(); 
     p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(p); 

     CameraConfigurationUtils.setTorch(p,false); 

     FrameLayout frameLayout = new FrameLayout(this); 

     FrameLayout.LayoutParams mainParam = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
     frameLayout.setLayoutParams(mainParam); 





     //end 3 
     scanButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent refresh = new Intent(WorkOut.this, MposHomeScreen.class); 
       startActivity(refresh); 
      } 
     }); 

     frameLayout.addView(mScannerView); 
     frameLayout.addView(scanButton); 

     setContentView(frameLayout); 



    } 

    private void checkPermissions() { 
     try { 
      for (int i = currentIndex; i < permissions.length; i++) { 
       currentIndex = currentIndex + 1; 
       int result = ContextCompat.checkSelfPermission(this, permissions[i]); 
       if (result == PackageManager.PERMISSION_GRANTED) { 
       } else { 
        requestPermission(permissions[i]); 
        return; 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    Activity activity = this; 
    Context context = this; 

    String[] permissions = new String[]{Manifest.permission.CAMERA}; 


    private void requestPermission(String permission) { 


     ActivityCompat.requestPermissions(activity, new String[]{permission}, 
      101); 

    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case 101: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

        checkPermissions(); 
       } else { 
        try { 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 

       } 
       break; 
     } 
    } 


    @Override 
    public void onResume() { 
     super.onResume(); 

     if (response == 1) { 
      mScannerView = null; 
      mScannerView = new ZXingScannerView(this); 
      setContentView(mScannerView); 
      response = 0; 

     } 

     mScannerView.setResultHandler(this); 
     mScannerView.startCamera(); 

    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 


     mScannerView.stopCamera(); 

    } 

    @Override 
    protected void onRestart() { 
     super.onRestart(); 
     Log.d("ani", "onrestart"); 
    } 

    @Override 
    public void handleResult(Result rawResult) { 
     Toast.makeText(getApplicationContext(), "Scanned", Toast.LENGTH_SHORT).show(); 
     mScannerView.resumeCameraPreview(this); 
    } 
} 

Répondre

1

Désolé pour la réponse tardive ... peut-être encore son va aider quelqu'un. ZXingScannerView lui-même dispose d'un ensemble de méthode set/get très simple pour allumer/éteindre la lampe-torche correspondante. Vous n'avez pas besoin d'essayer (obsolète) Camera ou Camera2.

Tout d'abord, pour désactiver le flash en permanence au large, il suffit d'ajouter la ligne suivante après l'attribution mScannerView:

mScannerView.setFlash(false); 

En second lieu, pour faire basculer le flash on/off via un bouton, il suffit d'ajouter les éléments suivants ligne dans la méthode onClick du bouton:

mScannerView.setFlash(!mScannerView.getFlash()); 

c'est tout :) Cela a fonctionné fantastique pour moi.

+0

Chaque fois que le scanner est mis au point, le flash s'éteint et se rallume lors de la mise au point. Pourquoi cela arrive-t-il? – UrielUVD

+0

"le scanner se concentre"? Pas clair ... comment obtenez-vous le scanner concentré? –

+0

quand il acquiert le focus ... quand il acquiert le focus ... quand l'image n'est plus floue. Après cela, le scanner s'arrête une seconde et éteint la lampe de poche, perd la mise au point et rallume la lumière et ainsi de suite. Pourquoi cela arrive-t-il? – UrielUVD