2

我是 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。

4

0 回答 0