private void OpenCamera()
{
Activity activity = Activity;
if (activity == null || activity.IsFinishing || mOpeningCamera) {
return;
}
mOpeningCamera = true;
CameraManager manager = (CameraManager)activity.GetSystemService (Context.CameraService);
try
{
bool front = Arguments.GetBoolean(EXTRA_USE_FRONT_FACING_CAMERA);
if(front)
Log.Debug("VoiceCamera", "Front specified");
else
Log.Debug("VoiceCamera", "Back Specified");
Log.Debug("VoiceCamera", "Front ID: " + (int)LensFacing.Front + " Back ID: " + (int)LensFacing.Back);
foreach(var cameraId in manager.GetCameraIdList())
{
// To get a list of available sizes of camera preview, we retrieve an instance of
// StreamConfigurationMap from CameraCharacteristics
var characteristics = manager.GetCameraCharacteristics(cameraId);
var lens = characteristics.Get(CameraCharacteristics.LensFacing);
Log.Debug("VoiceCamera", "LensFacing: " + lens.ToString());
if(!IsCameraSpecified)
{
Log.Debug("VoiceCamera", "camera not specified");
if((int)lens == (int)LensFacing.Front)
{
Log.Debug("VoiceCamera", "Skip front facing camera");
//we don't use a front facing camera in this sample.
continue;
}
}
else if(!ShouldUseCamera((int)lens))
{
Log.Debug("VoiceCamera", "Skipping over camera, should not use");
//TODO: Handle case where there is no camera match
continue;
}
Log.Debug("VoiceCamera", "Using this camera");
StreamConfigurationMap map = (StreamConfigurationMap)characteristics.Get(CameraCharacteristics.ScalerStreamConfigurationMap);
mPreviewSize = map.GetOutputSizes(Java.Lang.Class.FromType(typeof(SurfaceTexture)))[0];
Android.Content.Res.Orientation orientation = Resources.Configuration.Orientation;
if (orientation == Android.Content.Res.Orientation.Landscape)
{
mTextureView.SetAspectRatio(mPreviewSize.Width, mPreviewSize.Height);
}
else
{
mTextureView.SetAspectRatio(mPreviewSize.Height, mPreviewSize.Width);
}
// We are opening the camera with a listener. When it is ready, OnOpened of mStateListener is called.
manager.OpenCamera(cameraId, mStateListener, null);
return;
}
}
catch (CameraAccessException ex) {
Toast.MakeText (activity, "Cannot access the camera.", ToastLength.Short).Show ();
Activity.Finish ();
} catch (NullPointerException) {
var dialog = new ErrorDialog ();
dialog.Show (FragmentManager, "dialog");
}
}