diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraUtils.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraUtils.java
index 003d80a..11b6eea 100644
--- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraUtils.java
+++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraUtils.java
@@ -97,6 +97,16 @@
     String[] cameraNames = cameraManager.getCameraIdList();
     List<Map<String, Object>> cameras = new ArrayList<>();
     for (String cameraName : cameraNames) {
+      int cameraId;
+      try {
+        cameraId = Integer.parseInt(cameraName, 10);
+      } catch (NumberFormatException e) {
+        cameraId = -1;
+      }
+      if (cameraId < 0) {
+        continue;
+      }
+
       HashMap<String, Object> details = new HashMap<>();
       CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraName);
       details.put("name", cameraName);
diff --git a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraUtilsTest.java b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraUtilsTest.java
index 6b714ce..e59b05b 100644
--- a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraUtilsTest.java
+++ b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraUtilsTest.java
@@ -5,8 +5,20 @@
 package io.flutter.plugins.camera;
 
 import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
+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.hardware.camera2.CameraMetadata;
 import io.flutter.embedding.engine.systemchannels.PlatformChannel;
+import java.util.List;
+import java.util.Map;
 import org.junit.Test;
 
 public class CameraUtilsTest {
@@ -52,4 +64,37 @@
   public void deserializeDeviceOrientation_throwsForNull() {
     CameraUtils.deserializeDeviceOrientation(null);
   }
+
+  @Test
+  public void getAvailableCameras_retrievesValidCameras()
+      throws CameraAccessException, NumberFormatException {
+    final Activity mockActivity = mock(Activity.class);
+    final CameraManager mockCameraManager = mock(CameraManager.class);
+    final CameraCharacteristics mockCameraCharacteristics = mock(CameraCharacteristics.class);
+    final String[] mockCameraIds = {"1394902", "-192930", "0283835", "foobar"};
+    final int mockSensorOrientation0 = 90;
+    final int mockSensorOrientation2 = 270;
+    final int mockLensFacing0 = CameraMetadata.LENS_FACING_FRONT;
+    final int mockLensFacing2 = CameraMetadata.LENS_FACING_EXTERNAL;
+
+    when(mockActivity.getSystemService(Context.CAMERA_SERVICE)).thenReturn(mockCameraManager);
+    when(mockCameraManager.getCameraIdList()).thenReturn(mockCameraIds);
+    when(mockCameraManager.getCameraCharacteristics(anyString()))
+        .thenReturn(mockCameraCharacteristics);
+    when(mockCameraCharacteristics.get(any()))
+        .thenReturn(mockSensorOrientation0)
+        .thenReturn(mockLensFacing0)
+        .thenReturn(mockSensorOrientation2)
+        .thenReturn(mockLensFacing2);
+
+    List<Map<String, Object>> availableCameras = CameraUtils.getAvailableCameras(mockActivity);
+
+    assertEquals(availableCameras.size(), 2);
+    assertEquals(availableCameras.get(0).get("name"), "1394902");
+    assertEquals(availableCameras.get(0).get("sensorOrientation"), mockSensorOrientation0);
+    assertEquals(availableCameras.get(0).get("lensFacing"), "front");
+    assertEquals(availableCameras.get(1).get("name"), "0283835");
+    assertEquals(availableCameras.get(1).get("sensorOrientation"), mockSensorOrientation2);
+    assertEquals(availableCameras.get(1).get("lensFacing"), "external");
+  }
 }
