Android - Kamera

Ini adalah dua cara berikut, di mana Anda dapat menggunakan kamera dalam aplikasi Anda

  • Menggunakan aplikasi kamera android yang ada di aplikasi kita

  • Langsung menggunakan Camera API yang disediakan oleh android di aplikasi kita

Menggunakan aplikasi kamera android yang ada di aplikasi kita

Anda akan menggunakan MediaStore.ACTION_IMAGE_CAPTURE untuk meluncurkan aplikasi kamera yang sudah ada yang terpasang pada ponsel Anda. Sintaksnya diberikan di bawah ini

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

Selain yang disebutkan di atas, ada Intent lain yang tersedia yang disediakan oleh MediaStore. Mereka terdaftar sebagai berikut

Sr Tidak Jenis dan deskripsi maksud
1

ACTION_IMAGE_CAPTURE_SECURE

Ini mengembalikan gambar yang diambil dari kamera, saat perangkat diamankan

2

ACTION_VIDEO_CAPTURE

Ini memanggil aplikasi video yang ada di android untuk merekam video

3

EXTRA_SCREEN_ORIENTATION

Ini digunakan untuk mengatur orientasi layar menjadi vertikal atau lanskap

4

EXTRA_FULL_SCREEN

Ini digunakan untuk mengontrol antarmuka pengguna ViewImage

5

INTENT_ACTION_VIDEO_CAMERA

Maksud ini digunakan untuk meluncurkan kamera dalam mode video

6

EXTRA_SIZE_LIMIT

Ini digunakan untuk menentukan batas ukuran video atau ukuran pengambilan gambar

Sekarang Anda akan menggunakan fungsi startActivityForResult () untuk meluncurkan aktivitas ini dan menunggu hasilnya. Sintaksnya diberikan di bawah ini

startActivityForResult(intent,0)

Metode ini telah didefinisikan di activitykelas. Kami menyebutnya dari aktivitas utama. Ada metode yang ditentukan di kelas aktivitas yang melakukan pekerjaan yang sama, tetapi digunakan saat Anda tidak memanggil dari aktivitas tetapi dari tempat lain. Mereka terdaftar di bawah ini

Sr Tidak Deskripsi fungsi aktivitas
1

startActivityForResult(Intent intent, int requestCode, Bundle options)

Ini memulai suatu aktivitas, tetapi dapat mengambil bundel opsi tambahan dengannya

2

startActivityFromChild(Activity child, Intent intent, int requestCode)

Ini meluncurkan aktivitas ketika aktivitas Anda adalah anak dari aktivitas lain

3

startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options)

Ini berfungsi sama seperti di atas, tetapi dapat mengambil nilai ekstra dalam bentuk bundel dengannya

4

startActivityFromFragment(Fragment fragment, Intent intent, int requestCode)

Ini meluncurkan aktivitas dari fragmen Anda saat ini di dalamnya

5

startActivityFromFragment(Fragment fragment, Intent intent, int requestCode, Bundle options)

Ini tidak hanya meluncurkan aktivitas dari fragmen, tetapi juga dapat mengambil nilai ekstra dengannya

Apa pun fungsi yang Anda gunakan untuk meluncurkan aktivitas, semuanya mengembalikan hasilnya. Hasilnya bisa diperoleh dengan mengganti fungsi onActivityResult .

Contoh

Berikut adalah contoh yang menunjukkan bagaimana cara meluncurkan aplikasi kamera yang ada untuk menangkap gambar dan menampilkan hasilnya dalam bentuk bitmap.

Untuk bereksperimen dengan contoh ini, Anda perlu menjalankan ini pada perangkat sebenarnya yang didukung kamera.

Langkah Deskripsi
1 Anda akan menggunakan IDE studio Android untuk membuat aplikasi Android dan menamakannya Kamera di bawah aplikasi com.example.sairamkrishna.my.
2 Ubah file src / MainActivity.java untuk menambahkan kode maksud untuk meluncurkan Kamera.
3 Ubah layout file XML res / layout / activity_main.xml
4 Tambahkan izin Kamera dan jalankan aplikasi dan pilih perangkat android yang sedang berjalan dan instal aplikasi di atasnya dan verifikasi hasilnya.

Berikut adalah konten file aktivitas utama yang dimodifikasi src/MainActivity.java.

package com.example.sairamkrishna.myapplication;

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);
   }
}

Berikut akan menjadi konten res/layout/activity_main.xml file-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
</RelativeLayout>

Berikut akan menjadi konten res/values/strings.xml untuk mendefinisikan satu konstanta baru

<resources>
   <string name="app_name">My Application</string>
</resources>

Berikut ini adalah konten default dari AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
  <uses-permission android:name="android.permission.CAMERA" />
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplication.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
     </activity>
     
   </application>
</manifest>

Mari coba jalankan aplikasi Anda. Saya berasumsi bahwa Anda telah menghubungkan perangkat Seluler Android Anda yang sebenarnya dengan komputer Anda. Untuk menjalankan aplikasi dari studio android, buka salah satu file aktivitas proyek Anda dan klik

ikon Jalankan dari bilah alat. Sebelum memulai aplikasi Anda, studio Android akan menampilkan jendela berikut untuk memilih opsi di mana Anda ingin menjalankan aplikasi Android Anda.

Pilih perangkat seluler Anda sebagai opsi dan kemudian periksa perangkat seluler Anda yang akan membuka kamera dan menampilkan layar berikut -