SlideShare a Scribd company logo
1 of 8
Download to read offline
Praktikum ANDROID 
ANDROID 
FOR 
BEGINNER MODUL 14 
! 
[ANDROID CAMERA] 
!!!!! 
SUDARYATNO 
yatnosudar@gmail.com | @dodulz | facebook : yatno.sudar 
Page 1 of 8
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
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) {
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()); 
} 
} 
}
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
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);
Praktikum ANDROID 
Page 7 of 8 
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(furi, 
MediaStore.Images.Thumbnails.MINI_KIND); 
image_preview.setImageBitmap(thumb); 
image_preview.setOnClickListener(new OnClickListener() 
{ 
@Override 
public void onClick(View arg0) { 
image_preview.setVisibility(View.GONE); 
video_view.setVisibility(View.VISIBLE); 
video_view.setVideoURI(Uri.fromFile(new File(furi))); 
video_view.start(); 
} 
}); 
video_view.setOnCompletionListener(new OnCompletionListener() { 
@Override 
public void onCompletion(MediaPlayer arg0) { 
image_preview.setVisibility(View.VISIBLE); 
video_view.setVisibility(View.GONE); 
} 
}); 
}} 
super.onActivityResult(requestCode, resultCode, data); 
} 
private static Uri getOutputMediaFileUri(int type) { 
return Uri.fromFile(getOutputMediaFile(type)); 
} 
private static File getOutputMediaFile(int type) { 
File mediaStorageDir = new File( 
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
MyCameraApp); 
if (!mediaStorageDir.exists()) { 
if (!mediaStorageDir.mkdirs()) { 
Log.d(MyCameraApp, failed to create directory); 
return null; 
} 
} 
String timeStamp = String.valueOf(new Date().getTime()); 
File mediaFile; 
if (type == MEDIA_TYPE_IMAGE) { 
mediaFile = new File(mediaStorageDir.getPath() + File.separator 
+ IMG_ + timeStamp + .jpg); 
furi = mediaFile.getPath(); 
} else if (type == MEDIA_TYPE_VIDEO) { 
mediaFile = new File(mediaStorageDir.getPath() + File.separator 
+ VID_ + timeStamp + .mp4); 
furi = mediaFile.getPath(); 
} else {return null;} 
return mediaFile; 
} 
}
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

More Related Content

What's hot

Menghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan androidMenghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan android
Agus Haryanto
 
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman MobileJeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
Individual Consultants
 
Membuat spinner array pada adt
Membuat spinner array pada adtMembuat spinner array pada adt
Membuat spinner array pada adt
iswan_di
 
Laporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptLaporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android ppt
Wahyu Anggara
 

What's hot (15)

Modul praktikum 10 - Android Sudaryatno
Modul praktikum 10 - Android SudaryatnoModul praktikum 10 - Android Sudaryatno
Modul praktikum 10 - Android Sudaryatno
 
Modul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android SudaryatnoModul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android Sudaryatno
 
Belajar Android Membuat Katalog Produk
Belajar Android Membuat Katalog ProdukBelajar Android Membuat Katalog Produk
Belajar Android Membuat Katalog Produk
 
15. lampiran listing program
15. lampiran   listing program15. lampiran   listing program
15. lampiran listing program
 
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLiteCara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
 
Tutorial Cara Membuat Aplikasi RSS Android - creatorb
Tutorial Cara Membuat Aplikasi RSS Android - creatorbTutorial Cara Membuat Aplikasi RSS Android - creatorb
Tutorial Cara Membuat Aplikasi RSS Android - creatorb
 
Live coding andorid
Live coding andoridLive coding andorid
Live coding andorid
 
Menghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan androidMenghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan android
 
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman MobileJeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
 
Seri 9 : Aplikasi gps dengan app inventor
Seri 9 : Aplikasi gps dengan app inventorSeri 9 : Aplikasi gps dengan app inventor
Seri 9 : Aplikasi gps dengan app inventor
 
Seri 7 : Mengakses aplikasi kamera dgn intent pada app inventor
Seri 7 : Mengakses aplikasi kamera dgn intent pada app inventorSeri 7 : Mengakses aplikasi kamera dgn intent pada app inventor
Seri 7 : Mengakses aplikasi kamera dgn intent pada app inventor
 
Seri 3 mengenal app inventor lebih dalam 2012
Seri 3 mengenal app inventor lebih dalam 2012Seri 3 mengenal app inventor lebih dalam 2012
Seri 3 mengenal app inventor lebih dalam 2012
 
Membuat spinner array pada adt
Membuat spinner array pada adtMembuat spinner array pada adt
Membuat spinner array pada adt
 
Laporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptLaporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android ppt
 
Workshop MVP Android Pattern
Workshop MVP Android PatternWorkshop MVP Android Pattern
Workshop MVP Android Pattern
 

Viewers also liked

Viewers also liked (19)

MVVM Core By GITS-Indonesia
MVVM Core By GITS-IndonesiaMVVM Core By GITS-Indonesia
MVVM Core By GITS-Indonesia
 
372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android Programming372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android Programming
 
Cloud Function For Firebase - GITS
Cloud Function For Firebase - GITSCloud Function For Firebase - GITS
Cloud Function For Firebase - GITS
 
Laporan praktikum modul 4
Laporan praktikum modul 4Laporan praktikum modul 4
Laporan praktikum modul 4
 
Laporan praktikum ii visual
Laporan praktikum ii visualLaporan praktikum ii visual
Laporan praktikum ii visual
 
Laporan pratikum v mulmet
Laporan pratikum v mulmetLaporan pratikum v mulmet
Laporan pratikum v mulmet
 
Modul praktikum 3 - Android Sudaryatno
Modul praktikum 3 - Android SudaryatnoModul praktikum 3 - Android Sudaryatno
Modul praktikum 3 - Android Sudaryatno
 
Modul praktikum 2 - Android Sudaryatno
Modul praktikum 2 - Android SudaryatnoModul praktikum 2 - Android Sudaryatno
Modul praktikum 2 - Android Sudaryatno
 
Laporan praktikum iv.1 visual
Laporan praktikum iv.1 visualLaporan praktikum iv.1 visual
Laporan praktikum iv.1 visual
 
Laporan praktikum iv.2 visual
Laporan praktikum iv.2 visualLaporan praktikum iv.2 visual
Laporan praktikum iv.2 visual
 
Laporan p1
Laporan p1Laporan p1
Laporan p1
 
Modul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android SudaryatnoModul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android Sudaryatno
 
Laporan praktikum iii visual basic
Laporan praktikum iii visual basicLaporan praktikum iii visual basic
Laporan praktikum iii visual basic
 
Modul praktikum 9 - Android Sudaryatno
Modul praktikum 9 - Android SudaryatnoModul praktikum 9 - Android Sudaryatno
Modul praktikum 9 - Android Sudaryatno
 
Modul praktikum 11 hashing table
Modul praktikum 11 hashing tableModul praktikum 11 hashing table
Modul praktikum 11 hashing table
 
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
 
Tutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash lightTutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash light
 
Belajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data MahasiswaBelajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data Mahasiswa
 
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android SederhanaTutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
 

Similar to Modul praktikum 14 - Android Sudaryatno

Jeni j2 me-bab02-memulai pemrograman mobile
Jeni j2 me-bab02-memulai pemrograman mobileJeni j2 me-bab02-memulai pemrograman mobile
Jeni j2 me-bab02-memulai pemrograman mobile
UNIVERSITY Of LAMPUNG
 
JENI-J2ME-Bab02-Memulai Pemrograman Mobile.pdf
JENI-J2ME-Bab02-Memulai Pemrograman Mobile.pdfJENI-J2ME-Bab02-Memulai Pemrograman Mobile.pdf
JENI-J2ME-Bab02-Memulai Pemrograman Mobile.pdf
Jurnal IT
 
Remote pemantau webcam berbasis aplikasi j2me
Remote pemantau  webcam  berbasis aplikasi j2meRemote pemantau  webcam  berbasis aplikasi j2me
Remote pemantau webcam berbasis aplikasi j2me
Dwi Fahmi
 

Similar to Modul praktikum 14 - Android Sudaryatno (20)

Pertemuan 7 camera
Pertemuan 7 cameraPertemuan 7 camera
Pertemuan 7 camera
 
Java2 micro edition_Helmi MH_1100631026
Java2 micro edition_Helmi MH_1100631026Java2 micro edition_Helmi MH_1100631026
Java2 micro edition_Helmi MH_1100631026
 
Aplikasi Cuaca dan Quiz Android
Aplikasi Cuaca dan Quiz AndroidAplikasi Cuaca dan Quiz Android
Aplikasi Cuaca dan Quiz Android
 
Laporan praktikum modul 7 pemrogrman mobile j2me
Laporan praktikum modul 7 pemrogrman mobile j2me Laporan praktikum modul 7 pemrogrman mobile j2me
Laporan praktikum modul 7 pemrogrman mobile j2me
 
Angkasa netbeans
Angkasa netbeansAngkasa netbeans
Angkasa netbeans
 
pemrograman mobile
pemrograman mobilepemrograman mobile
pemrograman mobile
 
Jeni j2 me-bab02-memulai pemrograman mobile
Jeni j2 me-bab02-memulai pemrograman mobileJeni j2 me-bab02-memulai pemrograman mobile
Jeni j2 me-bab02-memulai pemrograman mobile
 
JENI-J2ME-Bab02-Memulai Pemrograman Mobile.pdf
JENI-J2ME-Bab02-Memulai Pemrograman Mobile.pdfJENI-J2ME-Bab02-Memulai Pemrograman Mobile.pdf
JENI-J2ME-Bab02-Memulai Pemrograman Mobile.pdf
 
Remote pemantau webcam berbasis aplikasi j2me
Remote pemantau  webcam  berbasis aplikasi j2meRemote pemantau  webcam  berbasis aplikasi j2me
Remote pemantau webcam berbasis aplikasi j2me
 
Laporan praktikum modul 8 pemrogrman mobile j2me II devi-201208104
Laporan praktikum modul 8 pemrogrman mobile j2me II devi-201208104Laporan praktikum modul 8 pemrogrman mobile j2me II devi-201208104
Laporan praktikum modul 8 pemrogrman mobile j2me II devi-201208104
 
FIC - Flutter Basic.pdf
FIC - Flutter Basic.pdfFIC - Flutter Basic.pdf
FIC - Flutter Basic.pdf
 
J2me
J2meJ2me
J2me
 
Fundamental android application development
Fundamental android application developmentFundamental android application development
Fundamental android application development
 
02 Activity - Intents - Fragment.pptx
02 Activity - Intents - Fragment.pptx02 Activity - Intents - Fragment.pptx
02 Activity - Intents - Fragment.pptx
 
Expo camera
Expo cameraExpo camera
Expo camera
 
Modul 02 CRUD CI 3.pdf
Modul 02 CRUD CI 3.pdfModul 02 CRUD CI 3.pdf
Modul 02 CRUD CI 3.pdf
 
Modul 02 CRUD CI 3.pdf
Modul 02 CRUD CI 3.pdfModul 02 CRUD CI 3.pdf
Modul 02 CRUD CI 3.pdf
 
Modul Praktikum Pemrograman Berorientasi Objek (Chap.10)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.10)Modul Praktikum Pemrograman Berorientasi Objek (Chap.10)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.10)
 
Study Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdfStudy Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdf
 
Membuat Sistem Informasi Kepegawaian (SIMPEG) sederhana menggunakan yii2 (Par...
Membuat Sistem Informasi Kepegawaian (SIMPEG) sederhana menggunakan yii2 (Par...Membuat Sistem Informasi Kepegawaian (SIMPEG) sederhana menggunakan yii2 (Par...
Membuat Sistem Informasi Kepegawaian (SIMPEG) sederhana menggunakan yii2 (Par...
 

More from Yatno Sudar (6)

Slack Time
Slack TimeSlack Time
Slack Time
 
Introduction Data Warehouse With BigQuery
Introduction Data Warehouse With BigQueryIntroduction Data Warehouse With BigQuery
Introduction Data Warehouse With BigQuery
 
Introduction Flutter for Create Multiplatform Apps
Introduction Flutter for Create Multiplatform AppsIntroduction Flutter for Create Multiplatform Apps
Introduction Flutter for Create Multiplatform Apps
 
Chatbot With Dialogflow
Chatbot With DialogflowChatbot With Dialogflow
Chatbot With Dialogflow
 
Dialog Flow - GITS Indonesia
Dialog Flow - GITS IndonesiaDialog Flow - GITS Indonesia
Dialog Flow - GITS Indonesia
 
Technical Feasibility For Product
Technical Feasibility For ProductTechnical Feasibility For Product
Technical Feasibility For Product
 

Modul praktikum 14 - Android Sudaryatno

  • 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);
  • 7. Praktikum ANDROID Page 7 of 8 Bitmap thumb = ThumbnailUtils.createVideoThumbnail(furi, MediaStore.Images.Thumbnails.MINI_KIND); image_preview.setImageBitmap(thumb); image_preview.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { image_preview.setVisibility(View.GONE); video_view.setVisibility(View.VISIBLE); video_view.setVideoURI(Uri.fromFile(new File(furi))); video_view.start(); } }); video_view.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { image_preview.setVisibility(View.VISIBLE); video_view.setVisibility(View.GONE); } }); }} super.onActivityResult(requestCode, resultCode, data); } private static Uri getOutputMediaFileUri(int type) { return Uri.fromFile(getOutputMediaFile(type)); } private static File getOutputMediaFile(int type) { File mediaStorageDir = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), MyCameraApp); if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { Log.d(MyCameraApp, failed to create directory); return null; } } String timeStamp = String.valueOf(new Date().getTime()); File mediaFile; if (type == MEDIA_TYPE_IMAGE) { mediaFile = new File(mediaStorageDir.getPath() + File.separator + IMG_ + timeStamp + .jpg); furi = mediaFile.getPath(); } else if (type == MEDIA_TYPE_VIDEO) { mediaFile = new File(mediaStorageDir.getPath() + File.separator + VID_ + timeStamp + .mp4); furi = mediaFile.getPath(); } else {return null;} return mediaFile; } }
  • 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