CWAC-Cam2: Taking Pictures. Made (Somewhat) Sensible. Again.
Taking pictures using a third-party app is fairly straightforward,
using ACTION_IMAGE_CAPTURE
and ACTION_VIDEO_CAPTURE
. However, different camera
apps have slightly different behavior, meaning that you are prone to getting
inconsistent results.
Taking pictures using the Android SDK camera classes directly is
eminently possible, but is full of edge and corner cases, not to mention
its own set of per-device idiosyncracies. Plus, there are now two
separate APIs for this, three if you count MediaRecorder
for
video recording.
CWAC-Cam2
is an effort to create an in-app ACTION_IMAGE_CAPTURE
/ACTION_VIDEO_CAPTURE
workalike, with a bit more configurability. You still integrate by
opening up a separate activity (CameraActivity
and VideoRecorderActivity
, in this case), but
it is all within your own app, rather than relying upon device- or
user-specific third-party camera apps.
Library Objectives
The #1 objective of this library is maximum compatibility with hardware. As such, this library will not be suitable for all use cases.
The targeted use case is an app that might otherwise have relied upon
ACTION_IMAGE_CAPTURE
/ACTION_VIDEO_CAPTURE
, but needs greater reliablilty and somewhat greater
control (e.g., capture images directly to internal storage).
If you are trying to write "a camera app" — an app whose primary job is to take pictures — this library may be unsuitable for you.
Installation
To integrate the core AAR, the Gradle recipe is:
repositories {
maven {
url "https://repo.commonsware.com.s3.amazonaws.com"
}
}
dependencies {
compile 'com.commonsware.cwac:cam2:0.2.+'
}
The cam2
artifact depends on some other libraries, available in
JCenter or Maven Central. They should be pulled down automatically
when you integrate in the cam2
AAR.
You are also welcome to clone this repo and use the cam2/
Android
library project2 in source form.
Basic Usage
The only supported API at the moment is through
CameraActivity
and its IntentBuilder
for
still pictures and
VideoRecorderActivity
and its IntentBuilder
for videos.
While there are other public
classes and methods in the library,
ones that may be exposed as part of a public API in the future,
they are not supported at present.
Tested Devices
The compatibility status page outlines what devices have been tested with this library by the library author.
Dependencies
The cam2
artifact depends upon com.github.clans:fab
(for a floating
action button and floating action menu implementation) and
de.greenrobot:eventbus
(for internal communications within the
library). Both are listed as dependencies in the AAR artifact metadata
and should be added to your project automatically.
Version
This is version v0.2.0 of this library, which means it is a toddler, waddling around with a goofy grin on its face.
Demo
There are two demo projects.
One is demo/
. This illustrates taking pictures using the front
and rear-facing cameras. More importantly, it serves as a way of
collecting information about a device, particularly if you are
going to file a bug report.
The demo-playground/
sample project displays a PreferenceFragment
where you can tweak various IntentBuilder
configurations, then tap
on an action bar item to take a picture using those settings. This is
good for experimenting with the CameraActivity
and
VideoRecorderActivity
capabilities.
License
The code in this project is licensed under the Apache Software License 2.0, per the terms of the included LICENSE file.
Questions
If you have questions regarding the use of this code, please post a question
on StackOverflow tagged with
commonsware-cwac
and android
after searching to see if there already is an answer. Be sure to indicate
what CWAC module you are having issues with, and be sure to include source code
and stack traces if you are encountering crashes.
If you have encountered what is clearly a bug, or if you have a feature request, please read the contribution guidelines, then post an issue. Be certain to include complete steps for reproducing the issue.
Do not ask for help via social media.
Release Notes
- v0.2.0: added initial support for video recording, fixed aspect ratio and other bugs
- v0.1.1: added
forceClassic()
andupdateMediaStore()
, fixed numerous issues - v0.1.0: initial release