8

次の問題があります: 私の懐中電灯アプリは、Samsung Galaxy S2 では正常に動作しますが、残念ながら Samsung Galaxy Nexus では動作しません (問題: 懐中電灯はボタンクリックを無視します -> 反応なし、ライトなし、クラッシュなし、例外なし)。「Galaxy Nexus の LED 懐中電灯は、どの 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

4

2 に答える 2

17

私も同じ問題を抱えていましたが、サービスから LED をオンにしようとしていたため、1x1 の SurfaceView を使用できませんでした。これを機能させるために私がしたことは次のとおりです。

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 レベル 11 (Android 3.0) で追加されたため、Honeycomb 以降でのみ動作します。古い API レベルの場合は、他の回答の SurfaceView トリックに固執できます。

于 2013-03-25T04:05:17.203 に答える
4

同じ問題があり、幅1px、高さ1pxのSurface Viewを使用して解決しました

于 2012-05-10T11:19:10.677 に答える