Светодиодный фонарик не работает на Samsung Galaxy Nexus - PullRequest
8 голосов
/ 01 марта 2012

У меня следующая проблема: Мое приложение фонарик отлично работает на моем Samsung Galaxy S2, но, к сожалению, не на Samsung Galaxy Nexus (проблема: фонарик игнорирует нажатие кнопки -> нет реакции, нет света, нет сбоя, нет исключений). Я прочитал "Светодиодный фонарик на Galaxy Nexus, управляемый каким API?" здесь, в stackoverflow, но это не помогло мне, так как моя проблема все еще происходит. Это мой фрагмент кода для управления светом:

final Button FlashLightControl = (Button)findViewById(R.id.ledbutton);
FlashLightControl.setOnClickListener(new Button.OnClickListener()
{
        public void onClick(View arg) 
        {
            if(camera != null)
            {
                //in case light is on we will turn it off
                parameters = camera.getParameters();
                parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
                camera.setParameters(parameters);
                camera.stopPreview();
                camera.release();
                camera = null;
            }
            else
            {
                // light is off - we turn it on
                camera = Camera.open();
                parameters = camera.getParameters();
                parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
                camera.setParameters(parameters);
                camera.startPreview();
            }
        }}); 

Есть идеи? Для полноты - это разрешения, которые я добавил в Androidmanifest.xml:

    <uses-feature android:name="android.hardware.camera.flash" />
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>

Может кто-нибудь помочь?

С уважением, CarpeTemporem

Ответы [ 2 ]

17 голосов
/ 25 марта 2013

У меня тоже была такая же проблема, но я пытался включить светодиод из службы, поэтому я не мог использовать SurfaceView 1x1. Вот что я сделал, чтобы это работало.

private void turnLEDOn() throws IOException
{
    // In order to work, the camera needs a surface to turn on.
    // Here I pass it a dummy Surface Texture to make it happy.
    camera = Camera.open();
    camera.setPreviewTexture(new SurfaceTexture(0));
    camera.startPreview();
    Parameters p = camera.getParameters();
    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    camera.setParameters(p);
}

private void turnLEDOff()
{
    if (camera != null)
    {
        // Stopping the camera is enough to turn off the LED
        camera.stopPreview();
        camera.release();
        camera = null;
    } else
        throw new NullPointerException("Camera doesn't exist to turn off.");

}

SurfaceTexture был добавлен в API Level 11 (Android 3.0), поэтому он будет работать только с сотами или новее. Для более старых уровней API вы можете придерживаться трюка SurfaceView в другом ответе.

4 голосов
/ 10 мая 2012

У меня была такая же проблема, и я решил ее с помощью Surface View, имеющего ширину 1px и высоту 1px

...