دو راه برای کار با دوربین در اندروید در برنامه ی شما وجود داردکه آن دو راه عبارتند از:

  •  استفاده از برنامه ی دوربین اندروید موجود در برنامه ی خود .
  •  استفاده مستقیم از دوربین API در اندروید که در برنامه ی شما ارائه شده است.

کار با دوربین در اندروید:

شما برای آغاز برنامه ی نصب شده  دوربین روی گوشی خود از MediaStore.ACTION_IMAGE_CAPTURE استفاده می کنید، که ترکیب آن به شکل زیر می باشد.

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

علاوه بر مورد بالا Intent های دیگری وجود دارند که توسط MediaStore ارائه می شوند که در زیر لیست شده اند.

شماره انواع اینتنت و توضیحات
1 ACTION_IMAGE_CAPTURE_SECURE زمانی که دستگاه ایمن شده باشد، تصویر گرفته شده را به دوربین بازمی گرداند.
2 ACTON_VIDEO_CAPTURE برنامه video موجود در اندروید را فرامی خواند تا فیلم بگیرد.
3 EXTRA_SCREEN_ORIENTATION

جهت صفحه را به صورت عمودی یا منظره تنظیم می کند.

4 EXTRA_FULL_SCREEN

برای کنترل اینترفیس یوزر از ViewImage استفاده می شود.

5 INTENT_ACTION_VIDEO_CAMERA

برای آغاز کار دوربین در حالت ویدیو استفاده می شود.

6 EXTRA_SIZE_LIMIT

برای تعیین محدودیت اندازه ی تصویر یا فیلم گرفته شده استفاده می شود.

اکنون شما از عملکرد startActivityForResult() برای آغاز این فعالیت استفاده کرده و منتظر نتیجه می مانید. ترکیب آن در زیر ارائه شده است.

startActivityForResult(intent,0)

این روش در گروه Activity تعریف شده است، که آن را از فعالیت اصلی فرا می خوانیم. روش های تعریف شده ای در گروه Activity وجود دارند که همین کار را انجام می دهند اما زمانی استفاده می شوند که نه از گروه activity بلکه از جایی دیگر فراخوانده اید. می توانید لیست آن ها را در زیر ببینید.

شماره توضیح عملکرد و فعالیت
1 startActivityForResult(Intent intent, int requestCode, Bundle options)

یک فعالیت را آغاز می کند اما می تواند گروهی از گزینه های اضافه را با آن بگیرد.

2 startActivityFromChild(Activity child, Intent intent, int requestCode)

فعالیت را زمانی که فعالیت شما زیرمجموعه هر فعالیت دیگری است، آغاز می کند.

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

درست مانند بالا عمل می کند اما می تواند مقادیر اضافه را با آن به شکل یک دسته بگیرد.

4 startActivityFromFragment(Fragment fragment, Intent intent, int requestCode) فعالیت را از بخشی آغاز می کند که اکنون در آن هستید.
5 startActivityFromFragment(Fragment fragment, Intent intent, int requestCode, Bundle options) فعالیت را از یک بخش شروع نمی کند،اما می تواند مقادیر اضافه را با آن بگیرد.

مهم نیست از کدام عملکرد برای آغاز فعالیت استفاده می کنید، همه ی آن ها نتیجه را بازمی گردانند. نتیجه می تواند با تحت الشعاع قراردادن عملکرد onActivityResult به دست آید.

مثال

در اینجا مثالی را می بینید که نشان می دهد چگونه برنامه ی دوربین موجود را برای گرفتن عکس آغاز کنید و نتیجه را به شکل bitmap نمایش می دهد.

برای اجرای این مثال به دستگاهی نیاز دارید که در آن دوربین ساپورت می شود.

مرحله توضیحات
1 برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان Camera تحت بسته com.example.camera نام گذاری کنید.
2 فایل src/MainActivity.java را برای افزودن کد intent تغییر دهید تا فعالیت و روش نتیجه را برای دریافت خروجی آغاز کنید.
3 لی اوت فایل XML مربوط به res/layout/activity_main.xml را تغییر دهید و اگر لازم است مولفه ی GUI را اضافه کنید.
4 برای تعریف مقادیر ثابت لازم res/values/strings.xml را تغییر دهید.
5 برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کنید و برنامه را روی آن نصب کرده و نتایج را بررسی کنید.

 

در زیر محتوای تغییر یافته ی فعالیت اصلی را مشاهده می کنید.

 

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

 

در زیر محتوای 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>

 

در زیر محتوای res/values/strings.xml را برای تعریف یک مقدار ثابت مشاهده می کنید.

 

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

 

در زیر محتوای پیش فرض 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>

 

اجازه بدهید برنامه ی Camera را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن RunEclipse Run Icon از تولبار کلیک کنید. قبل از شروع برنامه ی شما، Eclipse پنجره ی زیر را برای انتخاب گزینه محل اجرای برنامه ی اندرویدتان، نمایش خواهد داد.

آموزش کار با دوربین در اندروید

دستگاه موبایل خود را به عنوان یک گزینه انتخاب کنید و سپس آن را چک کنید که صفحه ی زیر را نمایش خواهد داد.

آموزش کار با دوربین در اندروید