1. Praktikum ANDROID
ANDROID
FOR
BEGINNER MODUL 14
!
[ANDROID CAMERA]
!!!!!
SUDARYATNO
yatnosudar@gmail.com | @dodulz | facebook : yatno.sudar
Page 1 of 8
2. Praktikum ANDROID
ANDROID CAMERA
!
Camera adalah perangkat yang sering digunakan dalam aplikasi baik digunakan untuk
mengambil gambar atau video. Library android sudah mendukung untuk anda mengambil
gambar dan video lewat aplikasi anda. Ada beberapa cara untuk dapat mengakses kamera.
!
1. Menggunakan Intent (memanggil aplikasi kamera).
Cara pertama ini adalah memanggil aplikasi kamera default dari masing-masing Android. Jika
aplikasi Anda tidak membutuhkan fitur selain fitur bawaan kamera saya sarankan menggunakan
cara pertama ini.
2. Membangun camera sendiri.
Cara ini adalah membangun aplikasi kamera sendiri. Sehingga anda dapat menambahkan fitur-fitur
sesuai dengan aplikasi yang anda bangun. Cara ini baik digunakan bagi Anda yang
membangun aplikasi photo yang membutuhkan fitur lebih. Contohnnya aplikasi Camera 360.
!
Untuk menggunakan camera anda perlu menambahkan permission. Beberapa permission
tersebut adalah sebagai berikut :
1. Camera Permission - Permission wajib untuk akses ke hadware kamera
uses-permission android:name=android.permission.CAMERA /
2. Camera Feature - digunakan untuk akses fitur kamrea
uses-permission android:name=android.permission.WRITE_EXTERNAL_STORAGE /
3. Storage Permission - jika anda menggunakan media penyimpanana external, wajib
menggunakan permission ini
uses-permission android:name=android.permission.RECORD_AUDIO /
4. Location Permission - digunakan jika aplikasi anda menggunakan tags image untuk GPS
Location
uses-permission android:name=android.permission.ACCESS_FINE_LOCATION /
!
Step-Step INTENT Camera
1. Buat Camera
Buat INTENT camera sesuai dengan kebutuhan apakah itu Photo atau Video Recorder. Gunakan
MediaStore.ACTION_IMAGE_CAPTURE untuk memanggil intent dengan type Photo. Dan gunakan
MediaStore.ACTION_VIDEO_CAPTURE untuk memanggil intent dengan type Camera.
2. Jalankan Camera
Menjalankan camera dengan perintah startActivityForResult() ketika perintah ini dijalankan
aplikasi akan memangil aplikasi android yang di set default untuk kamera. Ketika selesai
mengambil gambar aplikasi. Anda akan diarahkan ke aplikasi anda lagi.
Page 2 of 8
3. Praktikum ANDROID
3. Terima hasil dari Camera
Setelah mengambil gambar, aplikasi akan menerima data dari intent. Data dari intent berupa URI
dari aplikasi.
!
Step-Step Build Camera
1. Cek ketersediaan kamera, Pada tahap ini di cek dulu ketersediaan jika tersedia lanjut ke tahap
berikutnnya.
2. Membuat class preview camera, class ini digunakan untuk menampilkan camera. Class yang
digunakan extends dari class SurfaceView dan SurfaceHolder.
Page 3 of 8
/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
if
(context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CA
MERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
/** A basic Camera preview class */
public class CameraPreview extends SurfaceView implements
SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
!
public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
!
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
// deprecated setting, but required on Android versions prior
to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
!
public void surfaceCreated(SurfaceHolder holder) {
4. Praktikum ANDROID
public void surfaceChanged(SurfaceHolder holder, int format, int
3. Membuat preview Layout, layout yang digunakan oleh class untuk menampilkan camera.
4. Menambahkan listener kamera, menambahkan listener action dari camera.
5. Ambil gambar dan simpan, dari listener tersebut diambil gambar dan dapat diolah kembali,
sesuai dengan keienginan.
Page 4 of 8
w, int h) {
// If your preview can change or rotate, take care of those
events here.
// Make sure to stop the preview before resizing or
reformatting it.
!
if (mHolder.getSurface() == null){
// preview surface does not exist
return;
}
!
// stop preview before making changes
try {
mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
!
// set preview size and make any resize, rotate or
// reformatting changes here
!
// start preview with new settings
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
!
} catch (Exception e){
Log.d(TAG, Error starting camera preview: +
e.getMessage());
}
}
}
5. Praktikum ANDROID
PRAKTIKUM
! Tujuan : Dapat mengakses kamera baik intent maupun build camera!
Scope : Uri,ImageView,VideoView,File! !
1. Buat project baru!
2. Edit XML layout menjadi seperti berikut :!
LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
Page 5 of 8
xmlns:tools=http://schemas.android.com/tools
android:layout_width=match_parent
android:layout_height=match_parent
android:orientation=vertical
android:paddingBottom=@dimen/activity_vertical_margin
android:paddingLeft=@dimen/activity_horizontal_margin
android:paddingRight=@dimen/activity_horizontal_margin
android:paddingTop=@dimen/activity_vertical_margin
ImageView
android:id=@+id/image_preview
android:layout_width=match_parent
android:layout_height=match_parent
android:layout_weight=1
android:src=@drawable/abc_ab_bottom_solid_dark_holo /
VideoView
android:id=@+id/videoView1
android:layout_width=match_parent
android:layout_height=wrap_content
android:layout_weight=1
android:visibility=gone /
TextView
android:id=@+id/path
android:layout_width=match_parent
android:layout_height=wrap_content
android:text=Small Text
android:textAppearance=?android:attr/textAppearanceSmall /
Button
android:id=@+id/button1
android:layout_width=match_parent
android:layout_height=wrap_content
android:layout_alignParentBottom=true
android:layout_marginTop=10dp
android:onClick=_TakeCamera
android:text=AMBIL GAMBAR /
Button
android:id=@+id/button2
android:layout_width=match_parent
android:layout_height=wrap_content
android:layout_alignParentBottom=true
android:onClick=_TakeVideo
android:text=AMBIL Video /
/LinearLayout
6. Praktikum ANDROID
ImageView : digunakan untuk mengambil preview gambar!
VideoView : digunakan untuk memutar video yang diambil dari camera! !
2. Edit file MainActivity menjadi seperti berikut :!
Page 6 of 8
public class MainActivity extends ActionBarActivity {
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
private Uri fileUri;
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
private static String furi = ;
private TextView path_image;
private ImageView image_preview;
private VideoView video_view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
path_image = (TextView) findViewById(R.id.path);
image_preview = (ImageView) findViewById(R.id.image_preview);
video_view = (VideoView) findViewById(R.id.videoView1);
}
public void _TakeCamera(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
}
public void _TakeVideo(View view) {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
path_image.setText(furi);
image_preview.setImageURI(Uri.fromFile(new File(furi)));
}
}
if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
path_image.setText(furi);
8. Praktikum ANDROID
!
Method getOutputMediaFile() digunakan untuk menyimpan file apakah video atau gambar.!
Method onActivityResult digunakan untuk mendapatkan hasil akhir dari intent camera apakah
berbentuk video atau gambar.! !
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(furi,
MediaStore.Images.Thumbnails.MINI_KIND); !
Code diatas digunakan untuk mengambil thumnail dari sebuat video dengan lokasi file yang telah
ditentukan. ! !
video_view.setVideoURI(Uri.fromFile(new File(furi)));
video_view.start(); !
Code diatas digunakan untuk menjalankan video dengan widget VideoView! !
3. Tambahkan permission di AndroidManifest.xml !
uses-permission android:name=android.permission.CAMERA /
uses-permission android:name=android.permission.WRITE_EXTERNAL_STORAGE /
uses-feature android:name=android.hardware.camera /
!4
. Jalankan Project! !! TUGAS :! !
1. Dari praktikum diatas. ubahlah lokasi penyimpanan file!
2. Ubah ukuran gambar dengan ukuran 640x480 dan manfaatkan code berikut ! !
// Get the dimensions of the View!
int targetW = 640;!
int targetH = 480;!
// Get the dimensions of the bitmap!
BitmapFactory.Options bmOptions = new BitmapFactory.Options();!
bmOptions.inJustDecodeBounds = true;!
BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);!
int photoW = bmOptions.outWidth;!
int photoH = bmOptions.outHeight;!
// Determine how much to scale down the image!
int scaleFactor = Math.min(photoW / targetW, photoH / targetH);!
// Decode the image file into a Bitmap sized to fill the View!
bmOptions.inJustDecodeBounds = false;!
bmOptions.inSampleSize = scaleFactor;!
bmOptions.inPurgeable = true;!
Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);!
image_preview.setImageBitmap(bitmap);
Page 8 of 8