Проблема с переключением фонарика: приложение Android только включает фонарик, а не выключает егоJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с переключением фонарика: приложение Android только включает фонарик, а не выключает его

Сообщение Anonymous »

Я разрабатываю приложение для Android, которое должно включать или выключать фонарик при запуске приложения. Цель — переключить фонарик в состояние, противоположное тому, в котором он был при запуске приложения. Однако моя реализация только включает фонарик, а не выключает его, если он уже был включен.
Вот код, который я использую:

Код: Выделить всё

import android.app.Activity;
import android.content.Context;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.os.Bundle;
import android.widget.Toast;

public class FlashlightToggleActivity extends Activity {
private CameraManager cameraManager;
private String cameraId;
private boolean isFlashlightOn = false;

private final CameraManager.TorchCallback torchCallback = new CameraManager.TorchCallback() {
@Override
public void onTorchModeChanged(String cameraId, boolean enabled) {
super.onTorchModeChanged(cameraId, enabled);
isFlashlightOn = enabled;
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
for (String id : cameraManager.getCameraIdList()) {
if (cameraManager.getCameraCharacteristics(id).get(CameraCharacteristics.FLASH_INFO_AVAILABLE)) {
cameraId = id;
break;
}
}
} catch (CameraAccessException e) {
e.printStackTrace();
}

if (cameraId == null) {
Toast.makeText(this, "Flashlight not available on this device", Toast.LENGTH_SHORT).show();
finish();
return;
}

cameraManager.registerTorchCallback(torchCallback, null);
toggleFlashlight();
}

private void toggleFlashlight() {
try {
cameraManager.setTorchMode(cameraId, !isFlashlightOn);
Toast.makeText(this, !isFlashlightOn ? "Flashlight turned on" : "Flashlight turned off", Toast.LENGTH_SHORT).show();
} catch (CameraAccessException e) {
Toast.makeText(this, "Error toggling flashlight: " + e.getMessage(), Toast.LENGTH_SHORT).show();
} finally {
finish();
}
}

@Override
protected void onDestroy() {
super.onDestroy();
cameraManager.unregisterTorchCallback(torchCallback);
}
}
Проблема:
Приложение правильно включает фонарик, если он был выключен, но если фонарик уже был включен при запуске приложения оно его не выключает.
Мне кажется, причина в флаге isFlashlightOn, который должен отслеживать состояние фонарика, но это выглядит так обратный вызов onTorchModeChanged может не успеть обновить isFlashlightOn до вызова toggleFlashlight. Я пробовал делать разные способы реализации, но моих навыков недостаточно для решения проблемы

Подробнее здесь: https://stackoverflow.com/questions/787 ... ht-not-off
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»