私はアンドロイド懐中電灯アプリを作っています。メイン アクティビティと、カメラ LED のオンとオフを切り替えることができる設定アクティビティの 2 つのアクティビティがあります。また、カメラを開く、解放する、ライトをオン/オフするなど、すべてのカメラの変更が処理される別のクラスもあります。
正しいアクティビティ ライフサイクル ステージでカメラを開いたりリリースしたりしていなかったため、共有設定に基づいて LED をオンにするとエラーが発生し続けました。いずれかのアクティビティで onPause が呼び出されたときにカメラを解放し、どちらかのアクティビティで onResume が呼び出されたときに (共有設定に基づいて) LED をオンまたはオフにすることで、問題を修正しました。
私が今抱えている問題は、カメラを放してから新しいアクティビティで再び開かなければならないため、あるアクティビティから別のアクティビティに切り替えると、LEDがオンになっていると一時的にオフになることです。この問題を解消する方法を見つけてくれる人はいますか? カメラをどこで開いてリリースすればよいですか?破棄時に解放しようとしましたが、アプリがバックグラウンドに最小化されているときに LED が点灯したままになり、望ましくありません。提案をありがとう。
メインアクティビティと設定アクティビティの両方で、次のものがあります。
@Override
protected void onResume() {
super.onResume();
if (sp.getBoolean("LED_TOGGLE_CB", false) == true) {
flash.turnFlashOn();
}
}
@Override
protected void onPause() {
super.onPause();
flash.killCamera();
}
私が持っているFlashクラスでは:
void getCamera() {
if(camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
} catch(RuntimeException e) {
Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
}
}
}
void turnFlashOn() {
getCamera();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
}
public void killCamera() {
if (camera != null) {
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
}