استفاده از دوربین در برنامه نویسی اندروید
استفاده از دوربین در برنامه نویسی اندروید
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، در مورد استفاده از دوربین در برنامه نویسی اندروید صحبت خواهیم کرد.
دو روش وجود دارد که در آن می توانید از دوربین در برنامه خود استفاده کنید
- با استفاده از برنامه دوربین اندروید موجود در برنامه ما
- به طور مستقیم با استفاده از Camera API ارائه شده توسط اندروید در برنامه ما
با استفاده از برنامه دوربین اندروید موجود در برنامه ما
شما برای راه اندازی یک برنامه دوربین موجود که روی تلفن شما نصب شده است، از MediaStore.ACTION_IMAGE_CAPTURE استفاده خواهید کرد. نحو آن در زیر آورده شده است.
1 |
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 استفاده خواهید کرد و منتظر نتیجه آن هستید. نحو آن در زیر آورده شده است
1 |
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 نشان می دهد.
برای آزمایش این مثال، باید این مورد را روی دستگاهی واقعی که دوربین بر روی آن پشتیبانی می شود، اجرا کنید.
شرح مراحل
1 شما برای ایجاد یک برنامه Android از Android studio IDE استفاده خواهید کرد و نام آن را به عنوان Camera در برنامه com.example.sairamkrishna.myapplication قرار می دهید.
2 برای افزودن کد intent برای راه اندازی دوربین، فایل src / MainActivity.java را تغییر دهید.
3 طرح XML فایل res / layout / activity_main.xml را تغییر دهید
4 اجازه دوربین را اضافه کنید و برنامه را اجرا کنید و یک دستگاه اندروید در حال اجرا انتخاب کنید و برنامه را روی آن نصب کنید و نتایج را تأیید کنید.
در زیر محتوای پرونده فعالیت اصلی تغییر یافته src / MainActivity.java است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
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 وجود دارد.
1 2 3 4 5 6 7 8 9 10 |
<?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 برای تعریف یک ثابت جدید وجود دارد
1 2 3 |
<resources> <string name="app_name">My Application</string> </resources> |
در زیر محتوای پیش فرض AndroidManifest.xml آمده است –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?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 Studio برنامه را روی AVD شما نصب کرده و شروع به کار می کند و اگر با تنظیمات و برنامه هایتان همه چیز خوب باشد، زیر پنجره شبیه ساز نمایش داده می شود.
موبایل خود را به عنوان گزینه انتخاب کنید و سپس موبایل خود را بررسی کنید که دوربین باز می شود و صفحه زیر نمایش داده می شود
لیست جلسات قبل آموزش برنامه نویسی اندروید
- نگاهی کلی به برنامه نویسی اندروید
- تنظیمات محیط در برنامه نویسی اندروید
- معماری برنامه نویسی اندروید
- اجزای برنامه در برنامه نویسی اندروید
- Hello World در برنامه نویسی اندروید
- سازماندهی و دسترسی به منابع در برنامه نویسی اندروید
- فعالیت در برنامه نویسی اندروید
- سرویس در برنامه نویسی اندروید
- گیرنده های پخش در برنامه نویسی اندروید
- ارائه دهنده محتوا در برنامه نویسی اندروید
- قطعات در برنامه نویسی اندروید
- Intent و فیلتر در برنامه نویسی اندروید
- طرح بندی رابط کاربری در برنامه نویسی اندروید
- کنترل های رابط کاربری در برنامه نویسی اندروید
- مدیریت رویدادها در برنامه نویسی اندروید
- استایل و تم ها در برنامه نویسی اندروید
- اجزای سفارشی در برنامه نویسی اندروید
- کشیدن و رها کردن در برنامه نویسی اندروید
- نوتیفیکیشن ها در برنامه نویسی اندروید
- سرویس های مبتنی بر مکان در برنامه نویسی اندروید
- ارسال ایمیل در برنامه نویسی اندروید
- ارسال پیامک در برنامه نویسی اندروید
- تماس های تلفنی در برنامه نویسی اندروید
- انتشار برنامه اندروید
- آموزش Alert Dialog در برنامه نویسی اندروید
- انیمیشن در برنامه نویسی اندروید
- ضبط صدا در برنامه نویسی اندروید
- مدیریت صدا در برنامه نویسی اندروید
- آموزش Auto Complete در برنامه نویسی اندروید
- بهترین شیوه ها در برنامه نویسی اندروید
- بلوتوث در برنامه نویسی اندروید
دیدگاه شما