的Andr​​oid如何使LED闪烁/手电筒迅速 [英] Android How to blink led/flashlight rapidly

查看:148
本文介绍了的Andr​​oid如何使LED闪烁/手电筒迅速的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想给带LED /手电筒一定的影响。但它不是快速闪烁,即使我想睡觉(2),BT是需要时间的闪烁。我想更快地闪烁了。

 公共无效flash_effect()抛出InterruptedException的
{
    凸轮= Camera.open();
    最终的参数P = cam.getParameters();
    p.setFlashMode(Parameters.FLASH_MODE_TORCH);


    线程=新的Thread()
    {
        公共无效的run()
        {
            的for(int i = 0;我小于10;我++)
            {
                cam.setParameters(对);
                cam.start preVIEW();
                尝试 {
                    视频下载(50);
                }赶上(InterruptedException异常E){
                    // TODO自动生成的catch块
                    e.printStackTrace();
                }
                cam.stop preVIEW();
                尝试 {
                    视频下载(50);
                }赶上(InterruptedException异常E){
                    // TODO自动生成的catch块
                    e.printStackTrace();
                }

            }
        }
    };
    a.start();
}
 

解决方案

在何处设置你的preVIEW显示?

https://developer.android.com/reference/android/hardware/ Camera.html

  

重要提示:通过完全初始化SurfaceHolder到   集previewDisplay(SurfaceHolder)。未经表面,相机会   无法启动preVIEW。

  cam.set previewDisplay(空);
 

也许你应该试试这个:

 线程t =新的Thread(){
    公共无效的run(){
        尝试 {
            //切换凸轮的应用程序的生命
            如果(mCamera == NULL){
                //开启凸轮
                mCamera = Camera.open();
                尝试 {
                    mCamera.set previewDisplay(空);
                }赶上(IOException异常E){
                    e.printStackTrace();
                }
                mCamera.start preVIEW();
            }

            的for(int i = 0; I<倍* 2;我++){
                toggleFlashLight();
                睡眠(延迟);
            }

            如果(mCamera!= NULL){
                mCamera.stop preVIEW();
                mCamera.release();
                mCamera = NULL;
            }
        }赶上(例外五){
            e.printStackTrace();
        }
    }
};

t.start();
 

需要的功能:

  / **打开设备手电筒* /
公共无效turnOn(){
    如果(mCamera!= NULL){
    //开启LED
    mParams = mCamera.getParameters();
    mParams.setFlashMode(Parameters.FLASH_MODE_TORCH);
    mCamera.setParameters(mParams);

    关于= TRUE;
}
}

/ **关闭设备手电筒关* /
公共无效关断(){
    //关闭手电筒
    如果(mCamera!= NULL){
        mParams = mCamera.getParameters();
        如果(mParams.getFlashMode()。等于(Parameters.FLASH_MODE_TORCH)){
            mParams.setFlashMode(Parameters.FLASH_MODE_OFF);
            mCamera.setParameters(mParams);
        }
    }
    关于= FALSE;
}

/ **打开/关闭状态*手电筒/
公共无效toggleFlashLight(){
    如果(!上){//关闭,打开它
        打开();
    }其他{//打开,将其关闭
        关掉();
    }
}
 

和需要的情况下瓦尔:

 相机mCamera;
Camera.Parameters mParameters;
INT延迟= 100; //在毫秒
 

I am trying to give some effects with led/flashlight. but it is not blinking rapidly, even i tried sleep(2), bt it takes time to blink. i want to blink it faster.

public void flash_effect() throws InterruptedException
{
    cam = Camera.open();     
    final Parameters p = cam.getParameters();
    p.setFlashMode(Parameters.FLASH_MODE_TORCH);


    Thread a = new Thread()
    {
        public void run()
        {
            for(int i =0; i < 10; i++)
            {
                cam.setParameters(p);
                cam.startPreview();
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                cam.stopPreview();
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }
    };
    a.start();
}

解决方案

Where do you set your preview display?

https://developer.android.com/reference/android/hardware/Camera.html

Important: Pass a fully initialized SurfaceHolder to setPreviewDisplay(SurfaceHolder). Without a surface, the camera will be unable to start the preview.

cam.setPreviewDisplay(null);

Maybe you should try this:

Thread t = new Thread() {
    public void run() {
        try {
            // Switch on the cam for app's life
            if (mCamera == null) {
                // Turn on Cam
                mCamera = Camera.open();
                try {
                    mCamera.setPreviewDisplay(null);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mCamera.startPreview();
            }

            for (int i=0; i < times*2; i++) {
                toggleFlashLight();
                sleep(delay);
            }

            if (mCamera != null) {
                mCamera.stopPreview();
                mCamera.release();
                mCamera = null;
            }
        } catch (Exception e){ 
            e.printStackTrace(); 
        }
    }
};

t.start();

Needed functions:

/** Turn the devices FlashLight on */
public void turnOn() {
    if (mCamera != null) {
    // Turn on LED
    mParams = mCamera.getParameters();
    mParams.setFlashMode(Parameters.FLASH_MODE_TORCH);
    mCamera.setParameters(mParams);

    on = true;
}
}

/** Turn the devices FlashLight off */
public void turnOff() {
    // Turn off flashlight
    if (mCamera != null) {
        mParams = mCamera.getParameters();
        if (mParams.getFlashMode().equals(Parameters.FLASH_MODE_TORCH)) {
            mParams.setFlashMode(Parameters.FLASH_MODE_OFF);
            mCamera.setParameters(mParams);
        }
    }
    on = false;
}

/** Toggle the flashlight on/off status */
public void toggleFlashLight() {
    if (!on) { // Off, turn it on
        turnOn();
    } else { // On, turn it off
        turnOff();
    }
}

and needed instance vars:

Camera mCamera;
Camera.Parameters mParameters;
int delay = 100; // in ms

这篇关于的Andr​​oid如何使LED闪烁/手电筒迅速的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆