Building Camera intent
Overview
2 ways to use Camera on Android:
- Easy: Use default camera app with Intent on Android device
- Fastest way to integrate to the app
- Hard: Embed the camera to app by using Camera API
- Allows custom functionalities (contols, filters)

How to build

Step 1. Define CAMERA
, WRITE_EXTERNAL_STORAGE
permissions and camera
feature in Manifest
<!-- AndroidManifest.xml -->
<manifest ... >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"
android:required="true" />
...
</manifest>
Step 2. Define ImageView
and Button
in layouts
<!-- activity_main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:gravity="center_horizontal">
...
<ImageView
android:layout_width="400dp"
android:layout_height="400dp"
android:id="@+id/image_view"
android:contentDescription="@string/icon_description"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/capture_btn"
android:text="@string/button_text" />
...
</LinearLayout>
Step 3. Initiate runtime permissions for camera and external storage
/* MainActivity.java */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// UI elements binding
mImageView = findViewById(R.id.image_view);
mCaptureBtn = findViewById(R.id.capture_btn);
mCaptureBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// check permissions
if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED ||
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
// if not enabled, request
String[] permission = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
} else {
// permissions already granted
openCamera();
}
}
});
}
Step 4. Handle permissions with onRequestPermissionsResult()
/* MainActivity.java */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] ==
PackageManager.PERMISSION_GRANTED) {
openCamera();
} else {
Toast.makeText(this, "Permission denied...", Toast.LENGTH_SHORT).show();
}
}
}
Step 5. Define openCamera()
(camera intent) method
/* MainActivity.java */
private void openCamera() {
// Sets path to MediaStore (gallery)
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE,"New Picture");
values.put(MediaStore.Images.Media.DESCRIPTION, "From the camera");
image_uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
// intent
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE);
}
Step 6. Set URI of ImageView
resource after successful return from Camera intent
/* MainActivity.java */
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
mImageView.setImageURI(image_uri);
}
}
Source code
https://github.com/tuttelikz/CameraSimple