我是 Java / Android 的新手。我正在为一个学校项目开发一个应用程序,我需要打开和关闭相机的闪电/闪光灯,就像闪光灯一样,我需要控制它打开和关闭的时间,现在我Thread.sleep();
用来控制等待时间,但这还不够准确。我可能想使用某种类型的计时器System.nanotime()
,但我不知道使用它的好方法,你们中的任何黑客都可以帮助我吗?
我试过这个。希望有更好的方法。
public void waiton(int ms){
long t0 = System.nanoTime()+ ms*1000000;
while(t0 > System.nanoTime()){
}
}
而不是睡觉。
Threat.sleep(5);
我想看看我能多快做出一个稳定的频闪灯,它最终不是我想要的频闪灯,但我想看看我能做到多快。这是为了学习!:P。
在这里你可以看到我正在处理的代码。
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Switch;
public class FlashActivity extends Activity {
public Camera cam = Camera.open();
int i = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.flashview);
final Button onbutton = (Button)findViewById(R.id.onbutton);
final Button offbutton = (Button)findViewById(R.id.offbutton);
final Switch switchonoff = (Switch)findViewById(R.id.switch1);
onbutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
i = 1;
new Thread(new Runnable() {
public void run() {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
Camera.Parameters p = cam.getParameters(), p2 = cam.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
p2.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
cam.startPreview();
cam.cancelAutoFocus();
//cam.autoFocus(null);
while (i == 1){
cam.setParameters(p);
waiton(10);
cam.setParameters(p2);
waitoff(10);
}
}
}).start();
}
});
offbutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
i = 0;
cam.stopPreview();
}
});
switchonoff.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Switch nv = (Switch)v;
if(nv.isChecked()){
i = 1;
}else{
i = 0;
}
}
});
}
@Override
protected void onStop() {
super.onStop();
cam.stopPreview();
i = 0;
if (cam != null) {
cam.release();
}
}
@Override
protected void onPause() {
super.onStop();
cam.stopPreview();
if (cam != null) {
cam.release();
}
}
public void waiton(int ms){
long t0 = System.nanoTime()+ ms*1000000;
while(t0 > System.nanoTime()){
}
}
public void waitoff(int ms){
long t1 = System.nanoTime()+ ms*1000000;
while(t1 > System.nanoTime()){
}
}
};
忽略开关,现在我正在从 2 个按钮转换为一个开关。但是我希望闪光灯之前可以工作,我对其进行了更多更改。
如果你们中的一些人有办法在不使用相机的情况下控制闪电战/闪光,那适用于所有较新的安卓手机。那将是完美的。
我的自动对焦有一些问题,会在一段时间内抛出错误,这可能会使我的程序更不稳定,焦点区域不能是 0,0,0,0,不知道我应该怎么做将其更改为。
稍后当它工作时,我想我会将它转换为状态机,以从中获得更多功能。如果对我来说可能的话:p。