我正在测试新的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);
}
答案 0 :(得分:-1)
除了你的代码中的任何可能的问题,te" setTorchMode" API需要1/3到1秒(!)才能完成。该API无法用于您的目的。也许这也是你代码中的问题......