Android M相机火炬模式改变频率

时间:2016-02-25 15:19:28

标签: android

我正在测试新的Camera API。我想用相机手电筒作为闪光灯。可以通过搜索条改变选通频率。相机闪光灯以初始值1000 ms开启,但即使更改了值变量,选通频率也不会改变。我认为我的问题是我使用了一个定时器用于选通功能。我有一个通过搜索条改变的变量值,但显然该值在闪光定时器功能内部永远不会改变。

CameraManager cameraManager;
    String[] camId;
    Camera camera;

    ViewGroup parentLayout;

    int value = 1000;


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

        final EditText editText = (EditText)
                findViewById(R.id.editText);


    cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
            try {
                camId = cameraManager.getCameraIdList();
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }

            try {
                strobe();
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        }


        final SeekBar skbar = (SeekBar)findViewById(R.id.seekBar);
        skbar.incrementProgressBy(1);
        skbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {



            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                                          boolean fromUser) {




                value = progress * 10;


                    editText.setText(value + " ms");


            }
        });



    }

    public void strobe() throws CameraAccessException {

        new Timer().scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                try {
                    cameraManager.setTorchMode(camId[0], true);
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }
                try {
                    cameraManager.setTorchMode(camId[0], false);
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }

            }

        }, 0, value);


    }

1 个答案:

答案 0 :(得分:-1)

除了你的代码中的任何可能的问题,te" setTorchMode" API需要1/3到1秒(!)才能完成。该API无法用于您的目的。也许这也是你代码中的问题......