modul praktikum 14 - android sudaryatno

8

Click here to load reader

Upload: yatno-sudar

Post on 02-Jul-2015

674 views

Category:

Software


4 download

DESCRIPTION

Modul,Android,Tutorial

TRANSCRIPT

Page 1: Modul praktikum 14 - Android Sudaryatno

Praktikum ANDROID

ANDROID

FOR

BEGINNER MODUL 14 ![ANDROID CAMERA]

!!!!!SUDARYATNO [email protected] | @dodulz | facebook : yatno.sudar

Page � of �1 8

Page 2: Modul praktikum 14 - Android Sudaryatno

Praktikum ANDROIDANDROID 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 � of �2 8

Page 3: Modul praktikum 14 - Android Sudaryatno

Praktikum ANDROID3. 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 � of �3 8

/** Check if this device has a camera */private boolean checkCameraHardware(Context context) { if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){ // 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) {

Page 4: Modul praktikum 14 - Android Sudaryatno

Praktikum ANDROID

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 � of �4 8

public void surfaceChanged(SurfaceHolder holder, int format, int 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()); } }}

Page 5: Modul praktikum 14 - Android Sudaryatno

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 :!

Page � of �5 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" 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>

Page 6: Modul praktikum 14 - Android Sudaryatno

Praktikum ANDROIDImageView : digunakan untuk mengambil preview gambar!VideoView : digunakan untuk memutar video yang diambil dari camera!!2. Edit file MainActivity menjadi seperti berikut :!

Page � of �6 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); } } @Overrideprotected 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);

Page 7: Modul praktikum 14 - Android Sudaryatno

Praktikum ANDROID

Page � of �7 8

Bitmap thumb = ThumbnailUtils.createVideoThumbnail(furi, MediaStore.Images.Thumbnails.MINI_KIND); image_preview.setImageBitmap(thumb); image_preview.setOnClickListener(new OnClickListener() {@Overridepublic 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() {@Overridepublic 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; }}

Page 8: Modul praktikum 14 - Android Sudaryatno

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 !

!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 � of �8 8

<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-feature android:name="android.hardware.camera" />