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

4 سال پیش

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

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

 

دو روش وجود دارد که در آن می توانید از دوربین در برنامه خود استفاده کنید

  • با استفاده از برنامه دوربین اندروید موجود در برنامه ما
  • به طور مستقیم با استفاده از Camera API ارائه شده توسط اندروید در برنامه ما

 

با استفاده از برنامه دوربین اندروید موجود در برنامه ما

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

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

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

  • ACTION_IMAGE_CAPTURE_SECURE

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

  • ACTION_VIDEO_CAPTURE

برنامه ویدیویی موجود در اندروید را برای ضبط ویدیو فراخوانی می کند

  • EXTRA_SCREEN_ORIENTATION

برای تنظیم جهت صفحه روی عمودی یا افقی استفاده می شود

  • EXTRA_FULL_SCREEN

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

  • INTENT_ACTION_VIDEO_CAMERA

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

  • EXTRA_SIZE_LIMIT

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

 

اکنون برای راه اندازی این activity از تابع ()startActivityForResult  استفاده خواهید کرد و منتظر نتیجه آن هستید. نحو آن در زیر آورده شده است

startActivityForResult(intent,0)

این متد در کلاس activity تعریف شده است. ما آن را از فعالیت اصلی (main 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

مانند بالا کار می کند ، اما می تواند مقادیر اضافی به شکل بسته نرم افزاری را با خود بگیرد

  • (startActivityFromFragment(Fragment fragment, Intent intent, int requestCode

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

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

این نه تنها فعالیت را از قطعه (فرگمنت) آغاز می کند، بلکه می تواند مقادیر اضافی را با خود بگیرد.

 

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

 

مثال

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

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

 

شرح مراحل 

۱ شما برای ایجاد یک برنامه Android از Android studio IDE استفاده خواهید کرد و نام آن را به عنوان Camera  در برنامه com.example.sairamkrishna.myapplication قرار می دهید.
۲ برای افزودن کد intent برای راه اندازی دوربین، فایل src / MainActivity.java را تغییر دهید.
۳ طرح XML فایل res / layout / activity_main.xml را تغییر دهید
۴ اجازه دوربین را اضافه کنید و برنامه را اجرا کنید و یک دستگاه اندروید در حال اجرا انتخاب کنید و برنامه را روی آن نصب کنید و نتایج را تأیید کنید.

در زیر محتوای پرونده فعالیت اصلی تغییر یافته 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);
   }
}

در زیر محتوای پرونده res / layout / activity_main.xml وجود دارد.

<?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>

بیایید برنامه را اجرا کنیم. من تصور می کنم شما AVD خود را هنگام راه اندازی محیط ایجاد کرده اید. برای اجرای برنامه از Android studio، یکی از پرونده های فعالیت پروژه خود را باز کنید و از نوار ابزار روی Android StudioRun Icon کلیک کنید. Android Studio برنامه را روی AVD شما نصب کرده و شروع به کار می کند و اگر با تنظیمات و برنامه هایتان همه چیز خوب باشد، زیر پنجره شبیه ساز نمایش داده می شود.

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

منبع.

لیست جلسات قبل آموزش برنامه نویسی اندروید

  1. نگاهی کلی به برنامه نویسی اندروید
  2. تنظیمات محیط  در برنامه نویسی اندروید
  3. معماری برنامه نویسی اندروید
  4. اجزای برنامه در برنامه نویسی اندروید
  5. Hello World در برنامه نویسی اندروید
  6. سازماندهی و دسترسی به منابع در برنامه نویسی اندروید
  7. فعالیت در برنامه نویسی اندروید
  8. سرویس در برنامه نویسی اندروید
  9. گیرنده های پخش در برنامه نویسی اندروید
  10. ارائه دهنده محتوا در برنامه نویسی اندروید
  11. قطعات در برنامه نویسی اندروید
  12. Intent و فیلتر در برنامه نویسی اندروید
  13. طرح بندی رابط کاربری در برنامه نویسی اندروید
  14. کنترل های رابط کاربری در برنامه نویسی اندروید
  15. مدیریت رویدادها در برنامه نویسی اندروید
  16. استایل و تم ها در برنامه نویسی اندروید
  17. اجزای سفارشی در برنامه نویسی اندروید
  18. کشیدن و رها کردن در برنامه نویسی اندروید
  19. نوتیفیکیشن ها در برنامه نویسی اندروید
  20. سرویس های مبتنی بر مکان در برنامه نویسی اندروید
  21. ارسال ایمیل در برنامه نویسی اندروید
  22. ارسال پیامک در برنامه نویسی اندروید
  23. تماس های تلفنی در برنامه نویسی اندروید
  24. انتشار برنامه اندروید
  25. آموزش Alert Dialog در برنامه نویسی اندروید
  26. انیمیشن در برنامه نویسی اندروید
  27. ضبط صدا در برنامه نویسی اندروید
  28. مدیریت صدا در برنامه نویسی اندروید
  29. آموزش Auto Complete در برنامه نویسی اندروید
  30. بهترین شیوه ها در برنامه نویسی اندروید
  31. بلوتوث در برنامه نویسی اندروید
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه