کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش استفاده از دوربین دستگاه اندروید با دو روش Intent و API

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

فهرست محتوا

1. دوربین دستگاه اندروید

2.آموزش استفاده از Intent برای گرفتن یک عکس

3. آموزش استفاده از API دوربین

دوربین دستگاه اندروید

امروزه بیشتر دستگاه های اندروید از حداقل یک دوربین برخوردار هستند, حتی برخی از دستگاه ها علاوه بر دوربین اصلی خود دارای یک لنز بر روی صفحه ی جلویی خود هستند .
بکاربردن دوربین در دستگاه اندروید از طریق مجتمع سازی (integration = ترکیب برنامه ها و سخت افزارها برای انجام کاری در یک واحد عملیاتی) برنامه ی نصب شده دوربین روی دستگاه صورت می گیرد . ابتدا برنامه ی موجود مرتبط با دوربین را با یک Intent راه اندازی کرده و از داده ی بازگشتی (return data) برنامه ی مذکور به منظور دسترسی به نتیجه استفاده کنید .
متناوباً می توان دوربین را با استفاده از رابط برنامه سازی کاربردی API)) Camera مستقیماً داخل اپلیکیشن گنجاند (مجتمع کرد / integrate) .

آموزش استفاده از Intent برای گرفتن یک عکس

در وهله ی اول یک پروژه ی جدید اندروید به نام de.vogella.android.imagepick ایجاد کنید . اکنون activity پروژه را ساخته و آن را ImagePickActivity نام گذاری کنید .
داخل طرح کلی (layout) activity یک ImageView با شناسه ی (ID) result بگنجانید . در مرحله ی بعد یک دکمه با خصوصیت (property) onClick اضافه کنید که به تابع onClick اشاره کند .
کلاس ImagePickActivity را به کد زیر اضافه کنید .

                
                                   
package de.vogella.android.imagepick;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
public class ImagePickActivity extends Activity {
  private static final int REQUEST_CODE = 1;
  private Bitmap bitmap;
  private ImageView imageView;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    imageView = (ImageView) findViewById(R.id.result);
  }
  public void onClick(View View) {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, REQUEST_CODE);
  }
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    InputStream stream = null;
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
      try {
        // recyle unused bitmaps
        if (bitmap != null) {
          bitmap.recycle();
        }
        stream = getContentResolver().openInputStream(data.getData());
        bitmap = BitmapFactory.decodeStream(stream);
        imageView.setImageBitmap(bitmap);
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } finally ch (IOException e) {
        e{
        if (stream != null)
          try {
            stream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
      }
  }
} 
                

آموزش استفاده از API دوربین

در این بخش به ساخت برنامه ی می پردازیم که با استفاده از دوربین جلوی خود یک عدد عکس تهیه کرده, سپس آن را روی sd card خود نصب کنید .

نکته:

در صورت استفاده از شبیه ساز اندروید اطمینان کسب کنید که دوربین را درست پیکربندی و تنظیم (config) کرده و حین ایجاد دستگاه مجازی اندروید خود یک حافظه ی خارجی (sd card) به آن اضافه کرده باشید .

ابتدا پروژه و سپس activity آن را ایجاد کنید . نام پروژه de.vogella.camera.api و نام activity آن را MakePhotoActivity انتخاب کنید .
جهت دستیابی به دوربین مجوز android.permission.CAMERA و به منظور ذخیره سازی یا رایت کردن داده بر روی حافظه ی خارجی مجوز android.permission.WRITE_EXTERNAL_STORAGE را به فایل AndroidManifest.xml اضافه کنید .

                
















            
        
    
  
                

فایل main.xml موجود در پوشه ی res/layout را به ترتیب زیر اصلاح کنید .

                



 

 
 
                

کلاس PhotoHandler که وظیفه ی ذخیره ی عکس را در حافظه ی خارجی دارد ایجاد کنید .

                
package de.vogella.camera.api;
 
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
public class PhotoHandler implements PictureCallback {
  private final Context context;
  public PhotoHandler(Context context) {
    this.context = context;
  }
  @Override
  public void onPictureTaken(byte[] data, Camera camera) {
    File pictureFileDir = getDir();
    if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
      Log.d(MakePhotoActivity.DEBUG_TAG, "Can't create directory to save image.");
      Toast.makeText(context, "Can't create directory to save image.",
          Toast.LENGTH_LONG).show();
      return;
    }
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
    String date = dateFormat.format(new Date());
    String photoFile = "Picture_" + date + ".jpg";
    String filename = pictureFileDir.getPath() + File.separator + photoFile;
    File pictureFile = new File(filename);
    try {
      FileOutputStream fos = new FileOutputStream(pictureFile);
      fos.write(data);
      fos.close();
      Toast.makeText(context, "New Image saved:" + photoFile,
          Toast.LENGTH_LONG).show();
    } catch (Exception error) {
      Log.d(MakePhotoActivity.DEBUG_TAG, "File" + filename + "not saved: "
          + error.getMessage());
      Toast.makeText(context, "Image could not be saved.",
          Toast.LENGTH_LONG).show();
    }
  }
  private File getDir() {
    File sdDir = Environment
      .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    return new File(sdDir, "CameraAPIDemo");
  }
} 
 
                

کلاس MakePhotoActivity را به کلاس زیر تغییر دهید . برای این کلاس لازم است که یک دکمه با ویژگی (property) onClick در طرح کلی (layout) خو ایجاد کنید که به تابع () onClick ارجاع دهد .

                
package de.vogella.camera.api;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import de.vogella.cameara.api.R;
public class MakePhotoActivity extends Activity {
  private final static String DEBUG_TAG = "MakePhotoActivity";
  private Camera camera;
  private int cameraId = 0;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // do we have a camera?
    if (!getPackageManager()
        .hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
      Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG)
          .show();
    } else {
      cameraId = findFrontFacingCamera();
      if (cameraId < 0) {
        Toast.makeText(this, "No front facing camera found.",
            Toast.LENGTH_LONG).show();
      } else {
        camera = Camera.open(cameraId);
      }
    }
  }
  public void onClick(View view) {
    camera.takePicture(null, null,
        new PhotoHandler(getApplicationContext()));
  }
  private int findFrontFacingCamera() {
    int cameraId = -1;
    // Search for the front facing camera
    int numberOfCameras = Camera.getNumberOfCameras();
    for (int i = 0; i < numberOfCameras; i++) {
      CameraInfo info = new CameraInfo();
      Camera.getCameraInfo(i, info);
      if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
        Log.d(DEBUG_TAG, "Camera found");
        cameraId = i;
        break;
      }
    }
    return cameraId;
  }
  @Override
  protected void onPause() {
    if (camera != null) {
      camera.release();
      camera = null;
    }
    super.onPause();
  }
} 
 
                
1394/07/27 6973 3359
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...