2012-01-16 11 views
25

Android用のLED懐中電灯のAPIに関する質問がたくさんあります。私はまだ別の質問をするのは恐れていますが、ここに行く..Galaxy NexusのLED懐中電灯はどのAPIで制御できますか?

私は自分のSamsung Galaxy SIIに満足し、LEDフラッシュをオンにすることができました。私の友人の銀河ネクサスで、そのような運はありません。私の他の友人のDroid Xではありません。

私は、あまり重要でない数のデバイスに固有のネイティブIOCTLコールが必要であるようです。これはGalaxy Nexusのケースですか?それをプログラムするための参考資料を見つけるにはどうすればよいですか?

私は標準のFLASH_MODE_TORCH/"flash-mode" = "torch"、startPreview()チェーンを実行しています。

この一見標準的なAPIは、結局のところ普遍的ではないように見えることは残念です。

答えて

44

私が知りましたところ、一部のデバイスでは、LEDをオンにするためにSurfaceViewが必要でした。

SurfaceView preview = (SurfaceView) findViewById(R.id.PREVIEW); 
SurfaceHolder mHolder = preview.getHolder(); 
mHolder.addCallback(this); 
Camera mCamera = Camera.open(); 
mCamera.setPreviewDisplay(mHolder); 

// Turn on LED 
Parameters params = mCamera.getParameters(); 
params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
mCamera.setParameters(params);  
mCamera.startPreview(); 

... 

// Turn off LED 
Parameters params = mCamera.getParameters(); 
params.setFlashMode(Parameters.FLASH_MODE_OFF); 
mCamera.setParameters(params); 
mCamera.stopPreview(); 
mCamera.release(); 

あなたの活動はSurfaceHolder.Callbackを実装する必要があります。

public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) {} 

public void surfaceCreated(SurfaceHolder holder) { 
    mHolder = holder; 
    mCamera.setPreviewDisplay(mHolder); 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    mCamera.stopPreview(); 
    mHolder = null; 
} 

surfaceviewがandroid:visibility="invisible"がまたは0の高さと幅が動作しません、見えなければなりません。残念ながら、私はそれを隠す良い解決策を見つけられなかったので、私は ちょうど1x1dipのサイズを与え、ボタンの下にそれを置いた。

**(上記の段落[あなたの現在のコンテンツビューのXMLのどこかに)返信が、それは]を便利だと感じたし、あなたが望む:

<SurfaceView 
    android:id="@+id/PREVIEW" 
    android:layout_width="1dip" 
    android:layout_height="1dip"/> 

あなたはRelativeLayout(優先内側にそれを持っている場合)、あなたも挟むためにalignParentLeft /ボトムを行うことができますそれは角にある。この方法は私のGalaxy Nexusでも機能しますが、Droid Xの既知の問題(電話側)(.621アップデートあり)は、私の場合は動作しません。素晴らしい答え、timosch!

+0

私はこれを撃つつもりです。ありがとう - – Malachi

+0

これは機能しましたか?誰にも? –

+0

これは機能しましたか? – Ivan

関連する問題