مقصودهای دوربین

برای انجام کنش‌های اصلی دوربین مثل گرفتن عکس یا ویدیو بااستفاده از برنامه پیش‌فرض دوربین دستگاه، نیازی به ادغام با کتابخانه دوربین ندارید. درعوض، از Intent استفاده کنید.

عکس گرفتن با برنامه دوربین

Android با فراخوانی Intent، کنش‌ها را به برنامه‌های دیگر واگذار می‌کند. این فرایند شامل سه بخش است: خود Intent، تماسی برای شروع Activity خارجی، و کدی برای مدیریت داده‌های تصویر وقتی تمرکز به فعالیت شما برمی‌گردد.

در اینجا تابعی وجود دارد که Intent را برای گرفتن عکس فراخوانی می‌کند.

کاتلین

val REQUEST_IMAGE_CAPTURE = 1

private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // display error state to the user
    }
}

جاوا

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    } catch (ActivityNotFoundException e) {
        // display error state to the user
    }
}

ضبط ویدیو با برنامه دوربین

همچنین می‌توانید Intent را برای ضبط ویدیو فراخوانی کنید.

کاتلین

val REQUEST_VIDEO_CAPTURE = 1

private fun dispatchTakeVideoIntent() {
    Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
        takeVideoIntent.resolveActivity(packageManager)?.also {
            startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)
        } ?: run {
          //display error state to the user
        }
    }
}

جاوا

static final int REQUEST_VIDEO_CAPTURE = 1;

private void dispatchTakeVideoIntent() {
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
    }
    else {
      //display error state to the user
    }
}

روش startActivityForResult() با شرطی محافظت می‌شود که resolveActivity() را فراخوانی می‌کند، که اولین مؤلفه فعالیت را که می‌تواند Intent را مدیریت کند برمی‌گرداند. این بررسی را انجام دهید تا مطمئن شوید Intent را فراخوانی می‌کنید که باعث ازکارافتادن برنامه‌تان نمی‌شود.

منابع تکمیلی

برای کنش‌های اصلی دوربین، از Intent استفاده کنید. درغیراین‌صورت، توصیه می‌شود برای هر چیزی پیچیده‌تر از ضبط تصویر یا ویدیو پایه، از کتابخانه‌های Camera2 و CameraX استفاده کنید.