如何在安卓工作室中实现带有手电筒闪烁代码的按钮



我想在安卓工作室中添加手电筒闪烁模式,带按钮。 但我不知道如何放置代码以及如何使用按钮实现此代码。 因为我希望如果我按下按钮,手电筒开始闪烁。

谁能告诉我如何使用按钮实现此代码?

String[] list1 = { "1", "0", "1", "0", "1", "0", "1", "0", "1", "0" };
    for (int i = 0; i < list1.length; i++) {
        if (list1[i].equals("0")) {
            params.setFlashMode(Parameters.FLASH_MODE_ON);
        } else {
            params.setFlashMode(Parameters.FLASH_MODE_OFF);
        }
    }

您可以使用此代码进行眨眼,我将其作为方法:

private void BlinkFlash(){
        String myString = "010101010101";
        long blinkDelay =50; //Delay in ms
        for (int i = 0; i < myString.length(); i++) {
            if (myString.charAt(i) == '0') {
                params = camera.getParameters();
                params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                camera.setParameters(params);
                camera.startPreview();
                isFlashOn = true;

            } else {
                params = camera.getParameters();
                params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                camera.setParameters(params);
                camera.stopPreview();
                isFlashOn = false;
            }
            try {
                Thread.sleep(blinkDelay);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

它会像这样调用:

BlinkMode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            BlinkFlash();
        }
    });

希望这对你有用,是的,如果你想长时间闪烁,让字符串变长

以下所有这些代码都放在您的活动/片段中的任何位置:状态、处理程序、相机变量:

        boolean isOn[] = {false};              
        boolean[] isBlinking = {false};
        Handler handler = new Handler();
        CameraManager camManager = null;
        String cameraId = null;

活动/片段上的处理按钮单击侦听器:

 camManager = (CameraManager) view.getContext().getSystemService(Context.CAMERA_SERVICE);
 buttonFlash.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(!isBlinking[0]){
                BlinkMode(view);
                isBlinking[0] = true; 
            } else {
                if(splashThread2 != null){
                    splashThread2.interrupt(); // stop blinking
                    OffFlash();
                }
                isBlinking[0] = false;
            }
        }
    });

闪烁方式:

    Thread splashThread2;
    private void BlinkMode(View view){
        splashThread2 = new Thread() {
            @Override
            public void run() {
                try {
                    while (!isInterrupted()) {
                        Thread.sleep(100);
                        if(!isOn[0]){
                            OnFlash();
                            isOn[0] = true;
                        } else {
                            isOn[0] = false;
                            OffFlash();
                        }
                    }
                } catch (Exception e) {
                }
            }
        };
        splashThread2.start();
    }

回头时处理

 @Override
    public void onStop() {
        super.onStop();
        if(splashThread2 != null){
            splashThread2.interrupt();   // stop blinking
            OffFlash();
        }
        // todo check null exception
    }
    @Override
    public void onPause() {
        super.onPause();
        if(splashThread2 != null){
            splashThread2.interrupt();  // stop blinking
            OffFlash();
        }
        // todo check null exception
    }

新版安卓的开/关方法:

    private void OnFlash(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            try {
                cameraId = camManager.getCameraIdList()[0];
                camManager.setTorchMode(cameraId, true);   //Turn ON
                isOn[0] = true;
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        }
    }
    private void OffFlash(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            try {
                cameraId = camManager.getCameraIdList()[0];
                camManager.setTorchMode(cameraId, false);   //Turn ON
                isOn[0] = false;
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        }
    }

最新更新