The document discusses implementing native camera access for an Android application using Codename One. It provides code samples for initializing a CameraView, setting camera properties and methods, and handling callbacks for images, videos, and errors. The CameraNativeAccessImpl class is used to access the camera from Codename One code by running operations on the Android UI thread. Hints are also provided for adding dependencies to build.gradle and configuring ProGuard.
6. public class CameraNativeAccessImpl {
private CameraView view;
private CameraKitEventListener listener =
new CameraKitEventListener() {
public void onEvent(CameraKitEvent event) {}
public void onError(CameraKitError error) {
String errorMessage = "";
if(error.getException() != null) {
errorMessage = error.getException().toString();
com.codename1.io.Log.e(error.getException());
com.codename1.io.Log.sendLogAsync();
}
CameraCallbacks.onError(error.getType(),
error.getMessage(), errorMessage);
}
public void onImage(CameraKitImage image) {
CameraCallbacks.onImage(image.getJpeg());
}
public void onVideo(CameraKitVideo video) {
CameraCallbacks.onVideo("file://" +
video.getVideoFile().getAbsolutePath());
}
};
CameraNativeAccessImpl
7. public class CameraNativeAccessImpl {
private CameraView view;
private CameraKitEventListener listener =
new CameraKitEventListener() {
public void onEvent(CameraKitEvent event) {}
public void onError(CameraKitError error) {
String errorMessage = "";
if(error.getException() != null) {
errorMessage = error.getException().toString();
com.codename1.io.Log.e(error.getException());
com.codename1.io.Log.sendLogAsync();
}
CameraCallbacks.onError(error.getType(),
error.getMessage(), errorMessage);
}
public void onImage(CameraKitImage image) {
CameraCallbacks.onImage(image.getJpeg());
}
public void onVideo(CameraKitVideo video) {
CameraCallbacks.onVideo("file://" +
video.getVideoFile().getAbsolutePath());
}
};
CameraNativeAccessImpl
8. public class CameraNativeAccessImpl {
private CameraView view;
private CameraKitEventListener listener =
new CameraKitEventListener() {
public void onEvent(CameraKitEvent event) {}
public void onError(CameraKitError error) {
String errorMessage = "";
if(error.getException() != null) {
errorMessage = error.getException().toString();
com.codename1.io.Log.e(error.getException());
com.codename1.io.Log.sendLogAsync();
}
CameraCallbacks.onError(error.getType(),
error.getMessage(), errorMessage);
}
public void onImage(CameraKitImage image) {
CameraCallbacks.onImage(image.getJpeg());
}
public void onVideo(CameraKitVideo video) {
CameraCallbacks.onVideo("file://" +
video.getVideoFile().getAbsolutePath());
}
};
CameraNativeAccessImpl
9. public void start() {
AndroidImplementation.runOnUiThreadAndBlock(new Runnable() {
public void run() {
if(view == null) {
view = new CameraView(AndroidNativeUtil.getContext());
view.addCameraKitListener(listener);
}
view.start();
}
});
}
public void stop() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.stop();
}
});
}
public boolean isStarted() {
if(view == null) {
return false;
}
return view.isStarted();
}
CameraNativeAccessImpl
10. public void start() {
AndroidImplementation.runOnUiThreadAndBlock(new Runnable() {
public void run() {
if(view == null) {
view = new CameraView(AndroidNativeUtil.getContext());
view.addCameraKitListener(listener);
}
view.start();
}
});
}
public void stop() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.stop();
}
});
}
public boolean isStarted() {
if(view == null) {
return false;
}
return view.isStarted();
}
CameraNativeAccessImpl
11. public void start() {
AndroidImplementation.runOnUiThreadAndBlock(new Runnable() {
public void run() {
if(view == null) {
view = new CameraView(AndroidNativeUtil.getContext());
view.addCameraKitListener(listener);
}
view.start();
}
});
}
public void stop() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.stop();
}
});
}
public boolean isStarted() {
if(view == null) {
return false;
}
return view.isStarted();
}
CameraNativeAccessImpl
12. public void run() {
view.stop();
}
});
}
public boolean isStarted() {
if(view == null) {
return false;
}
return view.isStarted();
}
public void setMethod(final int param) {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.setMethod(param);
}
});
}
public android.view.View getView() {
return view;
}
public boolean isSupported() {
return true;
}
CameraNativeAccessImpl
13. public void run() {
view.stop();
}
});
}
public boolean isStarted() {
if(view == null) {
return false;
}
return view.isStarted();
}
public void setMethod(final int param) {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.setMethod(param);
}
});
}
public android.view.View getView() {
return view;
}
public boolean isSupported() {
return true;
}
CameraNativeAccessImpl
14. public void setPermissions(final int param) {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.setPermissions(param);
}
});
}
public void setZoom(final float param) {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.setZoom(param);
}
});
}
public void setFocus(final int param) {
// ... same runOnUiThread code
}
public void setFlash(final int param) {
// ... same runOnUiThread code
}
public void setFacing(final int param) {
// ... same runOnUiThread code
}
CameraNativeAccessImpl
15. public void setPermissions(final int param) {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.setPermissions(param);
}
});
}
public void setZoom(final float param) {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.setZoom(param);
}
});
}
public void setFocus(final int param) {
// ... same runOnUiThread code
}
public void setFlash(final int param) {
// ... same runOnUiThread code
}
public void setFacing(final int param) {
// ... same runOnUiThread code
}
CameraNativeAccessImpl
16. public int getFacing() {
return view.getFacing();
}
public boolean isFacingFront() {
return view.isFacingFront();
}
public boolean isFacingBack() {
return view.isFacingBack();
}
public float getVerticalViewingAngle() {
return view.getCameraProperties().verticalViewingAngle;
}
public float getHorizontalViewingAngle() {
return view.getCameraProperties().horizontalViewingAngle;
}
public int getFlash() {
return view.getFlash();
}
public int getPreviewWidth() {
return view.getPreviewSize().getWidth();
}
public int getPreviewHeight() {
return view.getPreviewSize().getHeight();
CameraNativeAccessImpl
17. public int getFacing() {
return view.getFacing();
}
public boolean isFacingFront() {
return view.isFacingFront();
}
public boolean isFacingBack() {
return view.isFacingBack();
}
public float getVerticalViewingAngle() {
return view.getCameraProperties().verticalViewingAngle;
}
public float getHorizontalViewingAngle() {
return view.getCameraProperties().horizontalViewingAngle;
}
public int getFlash() {
return view.getFlash();
}
public int getPreviewWidth() {
return view.getPreviewSize().getWidth();
}
public int getPreviewHeight() {
return view.getPreviewSize().getHeight();
CameraNativeAccessImpl
18. public void captureVideoFile(final String param) {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
String f = param;
if (param.startsWith("file://")) {
f = param.substring(7);
}
view.captureVideo(new File(f));
}
});
}
public void captureImage() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.captureImage();
}
});
}
public void captureVideo() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.captureVideo();
}
});
}
public void stopVideo() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
CameraNativeAccessImpl
19. public void captureVideoFile(final String param) {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
String f = param;
if (param.startsWith("file://")) {
f = param.substring(7);
}
view.captureVideo(new File(f));
}
});
}
public void captureImage() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.captureImage();
}
});
}
public void captureVideo() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.captureVideo();
}
});
}
public void stopVideo() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
CameraNativeAccessImpl
20. public void captureVideoFile(final String param) {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
String f = param;
if (param.startsWith("file://")) {
f = param.substring(7);
}
view.captureVideo(new File(f));
}
});
}
public void captureImage() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.captureImage();
}
});
}
public void captureVideo() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
public void run() {
view.captureVideo();
}
});
}
public void stopVideo() {
AndroidNativeUtil.getActivity().runOnUiThread(new Runnable() {
CameraNativeAccessImpl