Android - Kamera

Bunlar, uygulamanızda kamerayı kullanabileceğiniz aşağıdaki iki yoldur

  • Uygulamamızda mevcut android kamera uygulamasını kullanmak

  • Doğrudan uygulamamızda android tarafından sağlanan Camera API kullanarak

Uygulamamızda mevcut android kamera uygulamasını kullanmak

Telefonunuzda kurulu mevcut bir kamera uygulamasını başlatmak için MediaStore.ACTION_IMAGE_CAPTURE kullanacaksınız. Söz dizimi aşağıda verilmiştir.

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

Yukarıdakilerin dışında, MediaStore tarafından sağlanan başka kullanılabilir Amaçlar da vardır. Aşağıdaki gibi listelenirler

Sr.No Amaç türü ve açıklaması
1

ACTION_IMAGE_CAPTURE_SECURE

Cihaz sabitlendiğinde kameradan yakalanan görüntüyü döndürür.

2

ACTION_VIDEO_CAPTURE

Video çekmek için androiddeki mevcut video uygulamasını çağırır

3

EXTRA_SCREEN_ORIENTATION

Ekranın yönünü dikey veya yatay olarak ayarlamak için kullanılır.

4

EXTRA_FULL_SCREEN

ViewImage'ın kullanıcı arayüzünü kontrol etmek için kullanılır.

5

INTENT_ACTION_VIDEO_CAMERA

Bu amaç, kamerayı video modunda başlatmak için kullanılır

6

EXTRA_SIZE_LIMIT

Video veya görüntü yakalama boyutunun boyut sınırını belirtmek için kullanılır

Şimdi bu etkinliği başlatmak ve sonucunu beklemek için startActivityForResult () işlevini kullanacaksınız . Söz dizimi aşağıda verilmiştir.

startActivityForResult(intent,0)

Bu yöntem, activitysınıf. Onu ana faaliyetten çağırıyoruz. Aktivite sınıfında aynı işi yapan ancak aktiviteden değil başka bir yerden çağırdığınızda kullanılan yöntemler vardır. Aşağıda listelenmiştir

Sr.No Etkinlik işlevi açıklaması
1

startActivityForResult(Intent intent, int requestCode, Bundle options)

Bir aktivite başlatır, ancak beraberinde fazladan seçenek paketi alabilir

2

startActivityFromChild(Activity child, Intent intent, int requestCode)

Aktiviteniz başka herhangi bir aktivitenin çocuğu olduğunda aktiviteyi başlatır

3

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

Yukarıdaki ile aynı şekilde çalışır, ancak bununla birlikte paket şeklinde ekstra değerler alabilir.

4

startActivityFromFragment(Fragment fragment, Intent intent, int requestCode)

Şu anda içinde bulunduğunuz parçadan etkinlik başlatır

5

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

Etkinliği sadece parçadan başlatmakla kalmaz, onunla ekstra değerler alabilir

Aktiviteyi başlatmak için hangi işlevi kullanırsanız kullanın, hepsi sonucu döndürür. Sonuç, onActivityResult işlevini geçersiz kılarak elde edilebilir .

Misal

Bir görüntüyü yakalamak ve sonucu bitmap biçiminde görüntülemek için mevcut kamera uygulamasının nasıl başlatılacağını gösteren bir örnek aşağıda verilmiştir.

Bu örneği denemek için, bunu kameranın desteklendiği gerçek bir cihazda çalıştırmanız gerekir.

Adımlar Açıklama
1 Bir Android uygulaması oluşturmak için Android studio IDE'yi kullanacak ve bunu com.example.sairamkrishna.myapplication altında Camera olarak adlandıracaksınız.
2 Kamerayı başlatmak üzere amaç kodu eklemek için src / MainActivity.java dosyasını değiştirin.
3 Düzen XML dosyasını res / layout / activity_main.xml değiştir
4 Kamera iznini ekleyin ve uygulamayı çalıştırın ve çalışan bir android cihazı seçin ve üzerine uygulamayı yükleyin ve sonuçları doğrulayın.

Aşağıda, değiştirilen ana etkinlik dosyasının içeriği yer almaktadır 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);
   }
}

Aşağıdakilerin içeriği olacak 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>

Aşağıdakilerin içeriği olacak res/values/strings.xml bir yeni sabit tanımlamak için

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

Aşağıdaki varsayılan içeriktir 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>

Uygulamanızı çalıştırmayı deneyelim. Gerçek Android Mobil cihazınızı bilgisayarınıza bağladığınızı varsayıyorum. Uygulamayı android stüdyosundan çalıştırmak için, projenizin etkinlik dosyalarından birini açın

ve araç çubuğundan Çalıştır simgesine tıklayın . Uygulamanızı başlatmadan önce, Android stüdyosu Android uygulamanızı çalıştırmak istediğiniz bir seçeneği seçmek için aşağıdaki pencereyi görüntüleyecektir.

Mobil cihazınızı bir seçenek olarak seçin ve ardından kamerayı açacak ve aşağıdaki ekranı görüntüleyecek olan mobil cihazınızı kontrol edin -