Как проверить, включена ли вспышка камеры программно на Android Studio?
Я делаю приложение фонарик. В приложении есть возможность переключаться со вспышки задней камеры на вспышку передней камеры. Проблема в том, что при включенном фонаре, если я переключаю заднюю камеру на переднюю, передняя камера мигает менее секунды, а затем выключается. Иногда этого не происходит. Итак, это ошибка. Я хочу, чтобы приложение проверяло, остается ли фонарик включенным после переключения камер. Я думаю, что я должен использовать обратные вызовы факела. Но документация Google не достаточно наглядна для понимания. Кроме того, не так много дискуссий по этому поводу на SO. Итак, я понятия не имею, как использовать обратные вызовы факелов. Я пытался, я получил ошибки... Я, должно быть, пытался что-то не так. Вот мой код:
package com.danielfernandzz.flashlight;
import android.content.Context; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CameraAccessException; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.Switch; public class MainActivity extends AppCompatActivity { public boolean switchState = false; Button switchbutton; String cameraId; CameraManager camManager; Switch frontToggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); switchbutton = (Button) findViewById(R.id.Switch); camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); frontToggle = (Switch) findViewById(R.id.frontToggle); try{cameraId = camManager.getCameraIdList()[0];} catch (CameraAccessException ex){finish();} } public void switched(View v){ if(!switchState){ switchState = true; switchbutton.setText("ON"); try {camManager.setTorchMode(cameraId,true);} catch (CameraAccessException ex) {finish();} } else{ switchState = false; switchbutton.setText("OFF"); try {camManager.setTorchMode(cameraId,false);} catch (CameraAccessException ex) {finish();} } } public void frontFlash(View z){ if (frontToggle.isChecked()){ if(switchState) { try {camManager.setTorchMode(cameraId, false);} catch (CameraAccessException ex) {finish();} } try{cameraId = camManager.getCameraIdList()[1];} catch (CameraAccessException ex){finish();} if(switchState) { try {camManager.setTorchMode(cameraId, true);} catch (CameraAccessException ex) {finish();} } //I want to add the callback to take place here } else { if(switchState) { try {camManager.setTorchMode(cameraId, false);} catch (CameraAccessException ex) {finish();} } try{cameraId = camManager.getCameraIdList()[0];} catch (CameraAccessException ex){finish();} if(switchState) { try {camManager.setTorchMode(cameraId, true);} catch (CameraAccessException ex) {finish();} } //And here } }
}
Любая помощь будет оценена. Если вы думаете, что ошибка была вызвана ошибкой в моем коде, сообщите мне об этом. Любая помощь будет оценена.
1 ответ
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
См. http://developer.android.com/reference/android/content/pm/PackageManager.html .