Я застрял здесь с проблемой. Попытка построить приложение-факел. Работает нормально, но когда я переключаю фрагмент или перехожу на рабочий стол и возвращаюсь, вспышка не работает. Ошибка подключения к службе камеры.Cant open Camera Servoce Android
Я думаю, что проблема в том, что я создаю новый экземпляр камеры, а новый кант больше не подключается к камере. Но как мне его решить?
public class FlashCameraManager {
private boolean isFlashOn;
private Camera camera;
public Camera.Parameters params;
// getting camera parameters
public void getCamera() {
if (camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
} catch (RuntimeException e) {
camera = null;
Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
}
} else {
camera.release();
camera = null;
}
}
public void FlashOnOff()
{
//Flash Aktivieren oder deaktivieren
if (isFlashOn)
{
//Turn Flash off
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
isFlashOn = false;
Log.d("FlashCameraManager", "Turning Flash off");
}
else
{
// Turn Flash on
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
Log.d("FlashCameraManager", "Turning Flash on");
}
}
public boolean isFlashActive()
{
//Prüfen ob Flash an oder aus ist
return isFlashOn;
}}
Это из MainActivity
final ImageButton flash = (ImageButton) rootView.findViewById(R.id.none_flash);
if(camera == null) {
camera = new FlashCameraManager();
}
camera.getCamera();
flash.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Content
if (camera.isFlashActive())
{
//Turn Flash off
camera.FlashOnOff();
Log.d("NoneFragment", "Turning Flash off");
flash.setActivated(false);
}
else
{
//Turn Flash on
camera.FlashOnOff();
Log.d("NoneFragment", "Turning Flash on");
flash.setActivated(true);
}
}});
Спасибо за вашу помощь. camera.release() был ключевым. Поместите его в onPause() в моем фрагменте, чтобы камера автоматически остановилась. – Nick
Другие вопросы: к какому уровню API работает камера2. Только 21, или я не прав? – Nick
Вы правы, android.hardware.camera2 доступен только для уровня API 21 и выше, поэтому, возможно, это не лучший выбор, если вы хотите поддерживать старые устройства; просто хотел сообщить вам, что API, который вы используете в настоящее время, устарел и, возможно, не лучший выбор для будущей разработки. – Willis