عکس گرفتن با دوربین و انتخاب عکس از گالری تصاویر در اندروید
شنبه 12 دی 1394در این مقاله می خواهیم با استفاده از یک دکمه به دوربین گوشی دسترسی پیدا کنیم و بتوانیم عکس بگیریم و یا اینکه از تصاویر گالری گوشی خود استفاده نماییم.
زمانی که شما با استفاده از گوشی عکسی می گیرید عکس مورد نظر را به imageview مورد نظر می برد و نمایش خواهد داد.
می توانید برای درک بهتر این مقاله، مقاله ی مدیریت عکس و فیلم و صدا و فایل های مختلف در اندروید
را مطالعه نمایید.
و اگر هم از دوربین نخواهید استفاده کنید می توانید از گالری تصاویر عکس مورد نظر خود را انتخاب نمایید.
قدم اول مجوز دسترسی برای عکس گرفتن و دسترسی به حافظه ی خارجی گوشی:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
آخرین مجوز که در خط آخر نوشته ایم برای ذخیره کردن تصویر گرفته شده است.
داخل لایه ی activity قطعه کد زیر را بنویسید:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="5dp" > <Button android:id="@+id/btnSelectPhoto" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Select Photo" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" > <ImageView android:id="@+id/viewImage" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/camera" /> </LinearLayout> </LinearLayout>
برای کلاس جاوا هم از قطعه کد زیر استفاده نمایید:
package com.barnamenevisan.CaptureImage; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class MyActivity extends Activity { ImageView viewImage; Button b; /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b=(Button)findViewById(R.id.btnSelectPhoto); viewImage=(ImageView)findViewById(R.id.viewImage); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { selectImage(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds options to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private void selectImage() { final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" }; AlertDialog.Builder builder = new AlertDialog.Builder(MyActivity.this); builder.setTitle("Add Photo!"); builder.setItems(options, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { if (options[item].equals("Take Photo")) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); startActivityForResult(intent, 1); } else if (options[item].equals("Choose from Gallery")) { Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, 2); } else if (options[item].equals("Cancel")) { dialog.dismiss(); } } }); builder.show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { if (requestCode == 1) { File f = new File(Environment.getExternalStorageDirectory().toString()); for (File temp : f.listFiles()) { if (temp.getName().equals("temp.jpg")) { f = temp; break; } } try { Bitmap bitmap; BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions); viewImage.setImageBitmap(bitmap); String path = android.os.Environment .getExternalStorageDirectory() + File.separator + "Phoenix" + File.separator + "default"; f.delete(); OutputStream outFile = null; File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg"); try { outFile = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile); outFile.flush(); outFile.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } else if (requestCode == 2) { Uri selectedImage = data.getData(); String[] filePath = { MediaStore.Images.Media.DATA }; Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null); c.moveToFirst(); int columnIndex = c.getColumnIndex(filePath[0]); String picturePath = c.getString(columnIndex); c.close(); Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath)); Log.w("path of image from gallery......******************.........", picturePath+""); viewImage.setImageBitmap(thumbnail); } } } }
از یک alertdialog استفاده می کنید که 3 بخش را برای شما باز خواهد کرد که اگر برای هر 3 بخش intent مربوطه باز خواهد شد.
خروجی به صورت زیر خواهد بود:
- Android
- 7k بازدید
- 2 تشکر