Saat membuat aplikasi android ada kalanya kita ingin mengimplementasikan fitur kamera yang ada di smartphone android. Lalu bagaimana cara menggunakan fitur kamera pada android studio ?.
Rekomendasi : Cara menggunakan strings.xml, colors.xml dan drawable
Untuk menggunakan kamera pada aplikasi yang kita buat kita perlu memanggil intent MediaStore. ACTION_IMAGE_CAPTURE. Adapun langkah-langkahnya yaitu :
1. Buat project baru di Android Studio
Buka android studio kemudian klik creat new project. Kemudian isi :
- application name : androidcamera
- phone and tablet : API 19 ( disesuaikan)
- activity : empty activity
- activity name : mainactivity
Jika sudah diisi silahkan klik finish dan tunggu sampai proses gradle selesai.
Rekomendasi : Buku Android Studio Mastery
2. Pembuatan layout
Buka activity_main.xml kemudian tambahkan atur layout menjadi relative layout . Silahkan modifikasi sesuai script xml dibawah ini.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="20dp" tools:context="badoystudio.com.androidcamera.MainActivity"> </RelativeLayout>
3. Mulai ngoding java
Buka MainActivity.java lalu tambahkan kode-kode dibawah ini
package badoystudio.com.androidcamera; import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; public class MainActivity extends AppCompatActivity { public static final int MY_PERMISSIONS_REQUEST_CAMERA = 100; public static final String ALLOW_KEY = "ALLOWED"; public static final String CAMERA_PREF = "camera_pref"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { if (getFromPref(this, ALLOW_KEY)) { showSettingsAlert(); } else if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { showAlert(); } else { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); } } } else { openCamera(); } } public static void saveToPreferences(Context context, String key, Boolean allowed) { SharedPreferences myPrefs = context.getSharedPreferences(CAMERA_PREF, Context.MODE_PRIVATE); SharedPreferences.Editor prefsEditor = myPrefs.edit(); prefsEditor.putBoolean(key, allowed); prefsEditor.commit(); } public static Boolean getFromPref(Context context, String key) { SharedPreferences myPrefs = context.getSharedPreferences(CAMERA_PREF, Context.MODE_PRIVATE); return (myPrefs.getBoolean(key, false)); } private void showAlert() { AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); alertDialog.setTitle("Alert"); alertDialog.setMessage("App needs to access the Camera."); alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "DONT ALLOW", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }); alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "ALLOW", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); } }); alertDialog.show(); } private void showSettingsAlert() { AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); alertDialog.setTitle("Alert"); alertDialog.setMessage("App needs to access the Camera."); alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "DONT ALLOW", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //finish(); } }); alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "SETTINGS", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); startInstalledAppDetailsActivity(MainActivity.this); } }); alertDialog.show(); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_CAMERA: { for (int i = 0, len = permissions.length; i < len; i++) { String permission = permissions[i]; if (grantResults[i] == PackageManager.PERMISSION_DENIED) { boolean showRationale = ActivityCompat.shouldShowRequestPermissionRationale( this, permission); if (showRationale) { showAlert(); } else if (!showRationale) { // user denied flagging NEVER ASK AGAIN // you can either enable some fall back, // disable features of your app // or open another dialog explaining // again the permission and directing to // the app setting saveToPreferences(MainActivity.this, ALLOW_KEY, true); } } } } // other 'case' lines to check for other // permissions this app might request } } @Override protected void onResume() { super.onResume(); } public static void startInstalledAppDetailsActivity(final Activity context) { if (context == null) { return; } final Intent i = new Intent(); i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); i.addCategory(Intent.CATEGORY_DEFAULT); i.setData(Uri.parse("package:" + context.getPackageName())); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); context.startActivity(i); } private void openCamera() { Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivity(intent); } }
4. Pengaturan uses permission
Selanjutnya kita atur permissionnya pada AndroidManifest.xml. Untuk kode-kodenya sendiri silahkan tambahkan seperti dibawah ini.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="badoystudio.com.androidcamera"> <uses-permission android:name="android.permission.CAMERA"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Rekomendasi : Tutorial Belajar Android Studio Lengkap Untuk Pemula
5. Running aplikasi
Running aplikasi yang sudah kita tambahkan fitur kamera menggunakan android virtual device, genymotion, atau langsung ke smartphone android yang kita miliki.
Pada latihan ini saya merunnng aplikasi menggunakan smartphone Oppo A3s dan hasilnya :
Itulah tutorial Cara Menggunakan Fitur Kamera pada Android Studio. Silahkan di praktekan dan jangan lupa share.