2016-02-25 3 views
1

Я тестирование нового API камеры. Я хочу использовать факел камеры как строб. Частоту строба можно изменить с помощью кнопки поиска. Вспышка камеры включается при начальном значении 1000 мс, но частота строба никогда не изменяется, даже если изменяется переменная значения. Я думаю, моя проблема в том, что я использую таймер для функции строба. У меня есть переменное значение, которое изменяется с помощью поисковой системы, но, очевидно, значение никогда не изменяется внутри функции таймера строба.Android M камеры изменение частоты torchMode

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

от любой возможной проблемы в вашем коде, т.е "setTorchMode" API занимает от 1/3 до 1 секунды (!), Чтобы закончить. Ни в коем случае этот API не может использоваться для вашей цели. И, возможно, это проблема и в вашем коде ...

Смежные вопросы