Android 如何在Zxing扫描仪视图中永久关闭闪存?

Android 如何在Zxing扫描仪视图中永久关闭闪存?,android,zxing,barcode-scanner,Android,Zxing,Barcode Scanner,我正在使用ZxingScannerView操作条形码扫描仪。我需要在扫描时关闭闪光灯,但相机组件已被弃用,因此是否有其他替代方法来实现此目的。特此附上我的代码,请给我一些可能的答案,以关闭zxingscanner中的闪光灯。提前感谢 import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.Intent; i

我正在使用ZxingScannerView操作条形码扫描仪。我需要在扫描时关闭闪光灯,但相机组件已被弃用,因此是否有其他替代方法来实现此目的。特此附上我的代码,请给我一些可能的答案,以关闭zxingscanner中的闪光灯。提前感谢

   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);
    }
}
导入android.Manifest;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.hardware.Camera;
导入android.os.Bundle;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入android.view.Gravity;
导入android.view.view;
导入android.view.ViewGroup.LayoutParams;
导入android.widget.FrameLayout;
导入android.widget.ImageView;
导入android.widget.Toast;
导入com.google.zxing.Result;
导入me.dm7.barcodescanner.zxing.ZXingScannerView;
公开课锻炼扩展AppCompatActivity实现ZXingScannerView.ResultHandler{
整数响应=0;
int currentIndex=0;
私人ZXingScannerView mScannerView;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mScannerView=新的ZXingScannerView(本);
Camera=Camera.open();
摄像机参数p;
p=camera.getParameters();
p、 设置闪光灯模式(摄像机、参数、闪光灯模式);
摄像机参数设置(p);
CameraConfiguration Utils.setTorch(p,false);
FrameLayout FrameLayout=新的FrameLayout(此);
FrameLayout.LayoutParams mainParam=新建FrameLayout.LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级);
frameLayout.setLayoutParams(mainParam);
//完三
scanButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意图刷新=新意图(WorkOut.this、mposhomesscreen.class);
星触觉(刷新);
}
});
frameLayout.addView(mScannerView);
frameLayout.addView(扫描按钮);
setContentView(框架布局);
}
私有void checkPermissions(){
试一试{
for(int i=currentIndex;i0&&grantResults[0]==PackageManager.PERMISSION\u已授予){
检查权限();
}否则{
试一试{
}捕获(例外e){
e、 printStackTrace();
}
}
打破
}
}
@凌驾
恢复时公开作废(){
super.onResume();
如果(响应==1){
mScannerView=null;
mScannerView=新的ZXingScannerView(本);
setContentView(mScannerView);
响应=0;
}
mScannerView.setResultHandler(此);
mScannerView.startCamera();
}
@凌驾
公共空间{
super.ondestory();
mScannerView.stopCamera();
}
@凌驾
受保护的void onRestart(){
super.onRestart();
日志d(“ani”、“重新启动”);
}
@凌驾
公共无效HandlerResult(结果rawResult){
Toast.makeText(getApplicationContext(),“扫描”,Toast.LENGTH\u SHORT.show();
mScannerView.resumeCameraPreview(本);
}
}

很抱歉回复太晚。。。也许它仍然会帮助别人。
ZXingScannerView
本身有一套非常简单的设置/获取方法,用于打开/关闭相应的相机手电筒。您不需要尝试使用(不推荐使用的)Camera或Camera2

首先,要永久关闭闪光灯,只需在分配
mScannerView
后添加以下行即可:

mScannerView.setFlash(false);
其次,要通过按钮打开/关闭闪光灯,只需在按钮的onClick方法中添加以下行:

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

就是这样:)对我来说效果非常好。

每次扫描仪对焦时,闪光灯会在重新对焦时关闭并再次打开。为什么会这样?“扫描仪聚焦”?不清楚。。。如何使扫描仪聚焦?当它聚焦时。。。当它获得焦点时。。。当图像不再模糊时。之后,扫描器停止一秒钟,关掉手电筒,失去焦点,重新打开灯等等。为什么会这样?真可爱。。已搜索此项很久。:)