diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java
index 89bb71a94ad8bc2ef767a0f2efb36e1ff58855eb..19559a6969a984cfc4f8e85eba6043b7d0775de8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java
@@ -7,6 +7,7 @@ import android.hardware.Camera.CameraInfo;
 import android.hardware.Camera.Parameters;
 import android.hardware.Camera.Size;
 import android.os.Build;
+import android.support.annotation.Nullable;
 import android.support.annotation.UiThread;
 import android.util.AttributeSet;
 import android.view.Surface;
@@ -43,6 +44,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 	private static final Logger LOG =
 			Logger.getLogger(CameraView.class.getName());
 
+	@Nullable
 	private Camera camera = null;
 	private PreviewConsumer previewConsumer = null;
 	private Surface surface = null;
@@ -86,6 +88,8 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 		try {
 			LOG.info("Opening camera");
 			camera = Camera.open();
+			if (camera == null)
+				throw new RuntimeException("No back-facing camera.");
 		} catch (RuntimeException e) {
 			LOG.log(WARNING, "Error opening camera", e);
 			return;
@@ -129,6 +133,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 	private void startPreview(SurfaceHolder holder) {
 		LOG.info("Starting preview");
 		try {
+			if (camera == null) throw new IOException("Camera is null.");
 			camera.setPreviewDisplay(holder);
 			camera.startPreview();
 			previewStarted = true;
@@ -142,6 +147,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 	private void stopPreview() {
 		LOG.info("Stopping preview");
 		try {
+			if (camera == null) throw new RuntimeException("Camera is null.");
 			stopConsumer();
 			camera.stopPreview();
 		} catch (RuntimeException e) {
@@ -152,12 +158,14 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 
 	@UiThread
 	private void startConsumer() {
+		if (camera == null) throw new RuntimeException("Camera is null");
 		if (autoFocus) camera.autoFocus(this);
 		previewConsumer.start(camera);
 	}
 
 	@UiThread
 	private void stopConsumer() {
+		if (camera == null) throw new RuntimeException("Camera is null");
 		if (autoFocus) camera.cancelAutoFocus();
 		previewConsumer.stop();
 	}
@@ -176,6 +184,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 		if (LOG.isLoggable(INFO))
 			LOG.info("Display orientation " + orientation + " degrees");
 		try {
+			if (camera == null) throw new RuntimeException("Camera is null");
 			camera.setDisplayOrientation(orientation);
 		} catch (RuntimeException e) {
 			LOG.log(WARNING, "Error setting display orientation", e);
@@ -216,7 +225,11 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 		setFocusMode(params);
 		params.setFlashMode(FLASH_MODE_OFF);
 		setPreviewSize(params);
-		camera.setParameters(params);
+		try {
+			camera.setParameters(params);
+		} catch (RuntimeException e) {
+			LOG.log(WARNING, "Error setting best camera parameters", e);
+		}
 		return camera.getParameters();
 	}
 
@@ -287,7 +300,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 
 	@UiThread
 	private void logCameraParameters() {
-		if (LOG.isLoggable(INFO)) {
+		if (camera != null && LOG.isLoggable(INFO)) {
 			Parameters params = camera.getParameters();
 			if (Build.VERSION.SDK_INT >= 15) {
 				LOG.info("Video stabilisation enabled: "