مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

کار با دوربین در برنامه نویسی اندروید با مثال و نمونه کد


دو راه برای استفاده از دوربین در اپلیکیشن وجود داردکه آن دو راه عبارتند از :

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

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

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

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

ACTION_IMAGE_CAPTURE_SECURE : زمانی که دستگاه ایمن شده باشد، تصویر گرفته شده را به دوربین باز می گرداند.

ACTON_VIDEO_CAPTURE : برنامه ی video موجود در اندروید را فرا می خواند تا فیلم بگیرد.

EXTRA_SCREEN_ORIENTATION : جهت صفحه را به صورت عمودی یا منظره(screen) تنظیم می کند.

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

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

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

 

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

startActivityForResult(intent,0)

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

(startActivityForResult(Intent intent, int requestCode, Bundle options : یک اکتیویتی را آغاز می کند اما می تواند گروهی از گزینه های اضافه را با آن بگیرد.

(startActivityFromChild(Activity child, Intent intent, int requestCode : اکتیویتی را زمانی که اکتیویتی شما زیرمجموعه ی یک اکتیویتی دیگری است، آغاز می کند.

(startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options : درست مانند بالا عمل می کند اما می تواند مقادیر اضافه را به شکل یک بسته نرم افزاری (Bundle ) بگیرد.

(startActivityFromFragment(Fragment fragment, Intent intent, int requestCode : اکتیویتی را از بخشی آغاز می کند که اکنون در آن هستید.

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

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

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

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

1) برای ایجاد یک اپلیکیشن  اندروید از Android studio IDE استفاده نموده و آن را با عنوان Camera تحت پکیج com.example.camera نام گذاری کنید. 

2) فایل src/MainActivity.java را برای افزودن کد intent تغییر دهید تا کدهای intent  برای دوربین را راه اندازی کند .

3) لی اوت فایل XML مربوط به res/layout/activity_main.xml را تغییر دهید 

4) برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کنید و برنامه را روی آن نصب کرده و نتایج را بررسی کنید.

 

در زیر محتوای موجود در اکتیویتی اصلی را مشاهده می کنید :

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 را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از android studio ، یکی از فایل های اکتیویتی پروژه را باز کرده و روی آیکن Run از نوار ابزار کلیک کنید. قبل از شروع برنامه ی شما، android studio پنجره ی زیر را برای انتخاب گزینه ی محل اجرای برنامه ی اندرویدتان، نمایش خواهد داد.

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

فصلِ: 20 , تعداد قسمت ها: 238 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل رایگان مربوط به مفاهیم php و api نویسی …

توضیحات کلی مجموعه: دوره متخصص اندروید کلیک سایت کامل ترین دوره جامع برنامه نویسی اندروید(حتما دمو دوره را ببینید)   چرا دوره متخصص جایگزین دوره صفرتاصد اندروید شد؟ کلیک سایت تصمیم گرفت …
فصلِ: 30 , تعداد قسمت ها: 182 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت اپلیکیشن علی بابا-آموزش کالبک ها-…

دوره "متخصص" جایگزین دوره صفرتاصد اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دوره صفرتاصد شده است؟چرا باید دوره متخص…
فصلِ: 11 , تعداد قسمت ها: 121 , سطح: صفر تا صد

این فصل در یک نگاه:

عملیات شبیه فیلتر-ساخت الرت دیالوگ وچیدمان براساس فروش-مرتب سازی-نحوه خطایابی-استفاده از bottom sheet در اندروید-سبد خری…

آموزش ساخت اپلیکیشن اندروید دیجی کالا  : ساخت برنامه اندروید یکی از پر طرفدارترین آموزش های کلیک سایت می باشد. با توجه به فراگیر شدن سیستم اندروید و آشنایی افراد با این سیستم ، برنامه های ک…
فصلِ: 3 , تعداد قسمت ها: 179 , سطح: صفر تا صد

این فصل در یک نگاه:

در این دوره آموزشی ، برنامه نویسی اندروید و ios را با استفاده از زامارین خواهیم آموخت. همچنین به صورت کاملا پروژه محور ، اپلیکیشن فروشگاهی مشابه دیجی کالا را پیاده سازی خواهیم کرد. در انته…
فصلِ: 2 , تعداد قسمت ها: 58 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: سرفصل های دوره آموزش ساخت اپلیکیشن فیلیمو معرفی اهداف دوره مقدمه و بررسی پیش نیازهای دوره بررسی جزئی و …
فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت api key-آموزش استفاده از GPS گوشی ونمایش مکان شخص برروی نقشه-متصل کردن چند نقطه برروی نقشه با خط-رسم چند ضلعی…

حتما دمو دوره رو ببینید اولین دوره کامل کار با نقشه گوگل ومسیریابی در نقشه گوگل(این اموزش مشابه فارسی ندارد) اموزش کار با نقشه گوگل در برنامه نویسی اندروید یکی از مهم ترین مباحث هست که …
فصلِ: 1 , تعداد قسمت ها: 14 , سطح: صفر تا صد

این فصل در یک نگاه:

ساخت انواع نوتیفیکیشن ها -کار با وب سرویس پوشه-ارسال نوتیفیکیشن با سرویس پوشه-ارسال نوتیفیکیشن با one signal-اموزش کار ب…

با این مجموعه همه چیز در مورد نوتیفیکیشن و فایربیس رو خواهید اموخت یکی از مواردی که در استخدام کاربران در شرکت های برنامه نویسی بسیار موثر هست مبحث کار با firebase هست که ما دراین دوره ام…
فصلِ: 1 , تعداد قسمت ها: 16 , سطح: صفر تا صد

این فصل در یک نگاه:

لیست کردن فایل های صوتی ویدیویی گوشی-طاحی متریال وزیبا-استفاده از تب بندی-حرکت سیک بار همراه با اهنگ وزمان-ست کردن زمان …

توضیحات کلی مجموعه: اموزش ساخت یک موزیک پلیر و ویدیو پلیر ح رفه ای که کاملا کاربردی است و قابلیت نصب روی گوشی های مختلف را دارد از جمله امکانات این اپلیکیشن: لیست کردن فایل های صوتی وید…
فصلِ: 1 , تعداد قسمت ها: 61 , سطح: صفر تا صد

این فصل در یک نگاه:

اموزش ساخت اپلیکیشن کافه بازار-اشتراک گذاری اپلیکیشن-کار با رتروفیت-کاربا ران تیم پرمیشن- کار با فرگمنت ها-کار با sqlite…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دو…
فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد

این فصل در یک نگاه:

پرداخت درون برنامه ای بازار-اموزش فروش سکه-اموزش فروش اشتراک-اموزش فروش نسخه پولی-اموزش چک کردن خرید کردن کاربر-اموزش کا…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 1 , تعداد قسمت ها: 20 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش کامل پیکربندی mvp-اموزش اتصال با سرور با رتروفیت و rxjava-اموزش کار با دیتابیس-آموزش کار با bottom navigation-اموز…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 1 , تعداد قسمت ها: 35 , سطح: متوسط

این فصل در یک نگاه:

این آموزش در یک فصل شامل 35 جلسه آموزش تصویری به همراه سورس کد ارائه شده است.…

سرفصل ها مقدمه و معرفی متد آموزشی بررسی جزئی و خلاصه موارد موردنیاز پیش از آموزش شامل: کار با ویوها،  کار با کتابخانه های مختلف و ... …
فصلِ: 1 , تعداد قسمت ها: 1 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ارسال پیامک با سامانه مدیر پیامک-ارسال کد فعال سازی برنامه با پیامک-اعتبارسنجی کد فعال سازی-ثبت نام در اپلیکیشن با…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 2 , تعداد قسمت ها: 19 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ارسال توکن در اندروید -اموزش امنیت در برنامه نویسی اندروید-اموزش ارسال توکن در هدر در اندروید-اموزش ساخت token -ام…

توضیحات کلی مجموعه: دموی دوره را حتما ببینید دوره امنیت و دیزاین پترن در برنامه نویسی اندروید که شامل دو فصل هست. فصل اول شامل اموزش singletone design patern-builder design patern-command …
فصلِ: 2 , تعداد قسمت ها: 44 , سطح: صفر تا صد

این فصل در یک نگاه:

در فصل دوم این دوره بیشتر میپردازیم به کار با کتابخانه ها و موارد پیشرفته تر مانند دوربین ، ضبط صدا، دیتا بیس ، و .....…

توضیحات کلی مجموعه: سلام خدمت کلیک سایتی های عزیز مجموعه آموزشی صفر تا صد برنامه نویسی اندروید در محیط بیسیک 4 اندروید (basic 4 android) معرفی محیط بیسیک 4 اندروید محیط b4a  تحت کمپانی A…
فصلِ: 3 , تعداد قسمت ها: 61 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل جدید و اپدیت های جدید-آموزش کار با برودکست ریسیور در کاتلین-آموزش چک کردن اتصال به اینترنت در کاتلین-اموزش اپلود کرد…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 5 , تعداد قسمت ها: 21 , سطح: متوسط

این فصل در یک نگاه:

نحوه ارورگیری-رفع ایراد-رفع مشکل-اشتراک گذاری مطالب-ساخت اکتیویتی تنظیمات-اشتراک گذاری مطالب-جستجو کردن…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 5 , تعداد قسمت ها: 128 , سطح: صفر تا صد

این فصل در یک نگاه:

پرداخت درون برنامه ای بازار با کاتلین…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 8 , تعداد قسمت ها: 62 , سطح: صفر تا صد

این فصل در یک نگاه:

اپلود تصاویر روی سرور نود جی اس-کار با کانال در چت- ساخت کانال-ساخت گروه-تفاوت کانال و گروه-انلاین بودن-ارسال تصاویر در …

  توضیحات کلی مجموعه آموزش اندروید اپلیکیشن چت مشابه تلگرام( با استفاده از Socket IO ): دموی مجموعه را حتما ببینید دراین دوره سعی میشود بسیاری از اپشن هایی که اپلیکیشن موبوگرام داراست ر…
فصلِ: 6 , تعداد قسمت ها: 194 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل آپدیت های مربوط به دوره را قرار میدهیم…

با سلام و خسته نباشد خدمت کلیک سایتی های عزیز در ادامه با توضیحات مختصری درمورد دوره ی react native با ما همراه باشید: React Native چیست؟ قطعا یکی از آرزوهای برنامه نویسان این میباشد که ب…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید