برنامه نویسی اندروید

اموزش برنامه نویسی اندروید تخصصی

برنامه نویسی اندروید

اموزش برنامه نویسی اندروید تخصصی

امروزه بیشتر دستگاه های اندروید از حداقل یک دوربین برخوردار هستند, حتی برخی از دستگاه ها علاوه بر دوربین اصلی خود دارای یک لنز بر روی صفحه ی جلویی خود هستند . بکاربردن دوربین در دستگاه اندروید از طریق مجتمع سازی (integration = ترکیب برنامه ها و سخت افزارها برای انجام کاری در یک واحد عملیاتی) برنامه ی نصب شده دوربین روی دستگاه صورت می گیرد . ابتدا برنامه ی موجود مرتبط با دوربین را با یک Intent راه اندازی کرده و از داده ی بازگشتی (return data) برنامه ی مذکور به منظور دسترسی به نتیجه استفاده کنید . متناوباً می توان دوربین را با استفاده از رابط برنامه سازی کاربردی API)) Camera مستقیماً داخل اپلیکیشن گنجاند (مجتمع کرد / integrate) .
آموزش استفاده از Intent برای گرفتن یک عکس

 

در وهله ی اول یک پروژه ی جدید اندروید به نام de.vogella.android.imagepick ایجاد کنید . اکنون activity پروژه را ساخته و آن را ImagePickActivity نام گذاری کنید .
داخل طرح کلی (layout) activity یک ImageView با شناسه ی (ID) result بگنجانید . در مرحله ی بعد یک دکمه با خصوصیت (property) onClick اضافه کنید که به تابع onClick اشاره کند . کلاس ImagePickActivity را به کد زیر اضافه کنید .
?
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
                                          
package  de.vogella.android.imagepick;  
import  java.io.FileNotFoundException;  
import  java.io.IOException;  
import  java.io.InputStream;  
import  android.app.Activity;  
import  android.content.Intent;  
import  android.graphics.Bitmap;  
import  android.graphics.BitmapFactory;  
import  android.os.Bundle;  
import  android.view.View;  
import  android.widget.ImageView;  
public  class  ImagePickActivity  extends  Activity {  
   private  static  final  int  REQUEST_CODE =  1 ;  
   private  Bitmap bitmap;  
   private  ImageView imageView;  
   @Override  
   public  void  onCreate(Bundle savedInstanceState) {  
     super .onCreate(savedInstanceState);  
     setContentView(R.layout.main);  
     imageView = (ImageView) findViewById(R.id.result);  
   }  
   public  void  onClick(View View) {  
     Intent intent =  new  Intent();  
     intent.setType( "image/*" );  
     intent.setAction(Intent.ACTION_GET_CONTENT);  
     intent.addCategory(Intent.CATEGORY_OPENABLE);  
     startActivityForResult(intent, REQUEST_CODE);  
   }  
   @Override  
   protected  void  onActivityResult( int  requestCode,  int  resultCode, Intent data) {  
     InputStream stream =  null ;  
     if  (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)  
       try  {  
         // recyle unused bitmaps  
         if  (bitmap !=  null ) {  
           bitmap.recycle();  
         }  
         stream = getContentResolver().openInputStream(data.getData());  
         bitmap = BitmapFactory.decodeStream(stream);  
         imageView.setImageBitmap(bitmap);  
       }  catch  (FileNotFoundException e) {  
         e.printStackTrace();  
       }  finally  ch (IOException e) {  
         e{  
         if  (stream !=  null )  
           try  {  
             stream.close();  
           }  catch  (IOException e) {  
             e.printStackTrace();  
           }  
       }  
   }  
}   
    

 

آموزش استفاده از API دوربین

در این بخش به ساخت برنامه ی می پردازیم که با استفاده از دوربین جلوی خود یک عدد عکس تهیه کرده, سپس آن را روی sd card خود نصب کنید .
نکته:

در صورت استفاده از شبیه ساز اندروید اطمینان کسب کنید که دوربین را درست پیکربندی و تنظیم (config) کرده و حین ایجاد دستگاه مجازی اندروید خود یک حافظه ی خارجی (sd card) به آن اضافه کرده باشید .

ابتدا پروژه و سپس activity آن را ایجاد کنید . نام پروژه de.vogella.camera.api و نام activity آن را MakePhotoActivity انتخاب کنید . جهت دستیابی به دوربین مجوز android.permission.CAMERA و به منظور ذخیره سازی یا رایت کردن داده بر روی حافظه ی خارجی مجوز android.permission.WRITE_EXTERNAL_STORAGE را به فایل AndroidManifest.xml اضافه کنید .
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    <!--?xml version= "1.0"  encoding= "utf-8"  ?-->  
 
<manifest xmlns:android= "http://schemas.android.com/apk/res/android "  package = "de.vogella.cameara.api"  android:versioncode= "1"  android:versionname= "1.0" >  
<uses-sdk android:minsdkversion= "15" >  
 
<uses-permission android:name= "android.permission.CAMERA" >  
 
<uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" >  
 
<application android:icon= "@drawable/ic_launcher"  android:label= "@string/app_name" >  
<activity android:name= "de.vogella.camera.api.MakePhotoActivity"  android:label= "@string/app_name" >  
<intent-filter>  
<action android:name= "android.intent.action.MAIN" >  
 
<category android:name= "android.intent.category.LAUNCHER" >  
 
             </category></action></intent-filter>  
         </activity>  
     </application>  
</uses-permission></uses-permission></uses-sdk></manifest>    
    

 


فایل main.xml موجود در پوشه ی res/layout را به ترتیب زیر اصلاح کنید .
?
1
2
3
4
5
6
7
8
    <!--?xml version= "1.0"  encoding= "utf-8"  ?-->  
 
<relativelayout xmlns:android= "http://schemas.android.com/apk/res/android "  android:layout_width= "match_parent"  android:layout_height= "match_parent" >  
  <button android:id= "@+id/captureFront"  android:layout_width= "wrap_content"  android:layout_height= "wrap_content"  android:layout_centerinparent= "true"  android:onclick= "onClick"  android:text= "Make Photo" >  
 
    
    
                 </button></relativelayout>  
    

 


کلاس PhotoHandler که وظیفه ی ذخیره ی عکس را در حافظه ی خارجی دارد ایجاد کنید .
?
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
    package  de.vogella.camera.api;  
    
import  java.io.File;  
import  java.io.FileOutputStream;  
import  java.text.SimpleDateFormat;  
import  java.util.Date;  
import  android.content.Context;  
import  android.hardware.Camera;  
import  android.hardware.Camera.PictureCallback;  
import  android.os.Environment;  
import  android.util.Log;  
import  android.widget.Toast;  
public  class  PhotoHandler  implements  PictureCallback {  
   private  final  Context context;  
   public  PhotoHandler(Context context) {  
     this .context = context;  
   }  
   @Override  
   public  void  onPictureTaken( byte [] data, Camera camera) {  
     File pictureFileDir = getDir();  
     if  (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {  
       Log.d(MakePhotoActivity.DEBUG_TAG,  "Can't create directory to save image." );  
       Toast.makeText(context,  "Can't create directory to save image." ,  
           Toast.LENGTH_LONG).show();  
       return ;  
     }  
     SimpleDateFormat dateFormat =  new  SimpleDateFormat( "yyyymmddhhmmss" );  
     String date = dateFormat.format( new  Date());  
     String photoFile =  "Picture_"  + date +  ".jpg" ;  
     String filename = pictureFileDir.getPath() + File.separator + photoFile;  
     File pictureFile =  new  File(filename);  
     try  {  
       FileOutputStream fos =  new  FileOutputStream(pictureFile);  
       fos.write(data);  
       fos.close();  
       Toast.makeText(context,  "New Image saved:"  + photoFile,  
           Toast.LENGTH_LONG).show();  
     }  catch  (Exception error) {  
       Log.d(MakePhotoActivity.DEBUG_TAG,  "File"  + filename +  "not saved: "  
           + error.getMessage());  
       Toast.makeText(context,  "Image could not be saved." ,  
           Toast.LENGTH_LONG).show();  
     }  
   }  
   private  File getDir() {  
     File sdDir = Environment  
       .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);  
     return  new  File(sdDir,  "CameraAPIDemo" );  
   }  
}   
    

 


کلاس MakePhotoActivity را به کلاس زیر تغییر دهید . برای این کلاس لازم است که یک دکمه با ویژگی (property) onClick در طرح کلی (layout) خو ایجاد کنید که به تابع () onClick ارجاع دهد .
?
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
    package  de.vogella.camera.api;  
import  android.app.Activity;  
import  android.content.pm.PackageManager;  
import  android.hardware.Camera;  
import  android.hardware.Camera.CameraInfo;  
import  android.os.Bundle;  
import  android.util.Log;  
import  android.view.View;  
import  android.widget.Toast;  
import  de.vogella.cameara.api.R;  
public  class  MakePhotoActivity  extends  Activity {  
   private  final  static  String DEBUG_TAG =  "MakePhotoActivity" ;  
   private  Camera camera;  
   private  int  cameraId =  0 ;  
   @Override  
   public  void  onCreate(Bundle savedInstanceState) {  
     super .onCreate(savedInstanceState);  
     setContentView(R.layout.main);  
     // do we have a camera?  
     if  (!getPackageManager()  
         .hasSystemFeature(PackageManager.FEATURE_CAMERA)) {  
       Toast.makeText( this ,  "No camera on this device" , Toast.LENGTH_LONG)  
           .show();  
     }  else  {  
       cameraId = findFrontFacingCamera();  
       if  (cameraId <  0 ) {  
         Toast.makeText( this ,  "No front facing camera found." ,  
             Toast.LENGTH_LONG).show();  
       }  else  {  
         camera = Camera.open(cameraId);  
       }  
     }  
   }  
   public  void  onClick(View view) {  
     camera.takePicture( null ,  null ,  
         new  PhotoHandler(getApplicationContext()));  
   }  
   private  int  findFrontFacingCamera() {  
     int  cameraId = - 1 ;  
     // Search for the front facing camera  
     int  numberOfCameras = Camera.getNumberOfCameras();  
     for  ( int  i =  0 ; i < numberOfCameras; i++) {  
       CameraInfo info =  new  CameraInfo();  
       Camera.getCameraInfo(i, info);  
       if  (info.facing == CameraInfo.CAMERA_FACING_FRONT) {  
         Log.d(DEBUG_TAG,  "Camera found" );  
         cameraId = i;  
         break ;  
       }  
     }  
     return  cameraId;  
   }  
   @Override  
   protected  void  onPause() {  
     if  (camera !=  null ) {  
       camera.release();  
       camera =  null ;  
     }  
     super .onPause();  
   }  
}  

  • vahid hasani

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی