2014-01-22 3 views
2

Я новичок в разработке Android и разработке программы для захвата изображений с камеры и сохранения в SD-карте. Проблема заключается в том, что я создаю класс камеры отдельно и пытаюсь вызвать операцию capture_image. Вот мой код. Пожалуйста, помогите мне решить эту проблему.Как позвонить классу из Activity

Это путь я называю класс камеры

Camera cam=new Camera(); 
fileUri= cam.captureImage(); 

Вот это capture_image активность

package com.example.imagecapture; 

import java.io.File; 
import java.io.FileOutputStream; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.location.Location; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.ImageView.ScaleType; 
import android.widget.Toast; 




public class capture_image extends Activity { 




    private Uri fileUri; 
    private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; 
    private static int RESULT_LOAD_IMAGE = 1; 

    private ImageView image1; 
    private ImageView image2; 
    private ImageView image3; 
    private ImageView image4; 
    private ImageView image5; 
    private ImageView image6; 
    private ImageView image7; 
    private ImageView image8; 

    //private LocationManager locationManager; 
    private ImageView[] IMGS = { image1, image2, image3,image4,image5,image6,image7,image8 }; 
    private File file; 

    private String[] FileNameStrings = new String[8]; 

    private File[] listFile; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 



     setContentView(R.layout.capture_details); 

     Button buttonLoadImage = (Button) findViewById(R.id.btnBrowseimage); 
     buttonLoadImage.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       Intent i = new Intent(
         Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

       startActivityForResult(i, RESULT_LOAD_IMAGE); 
      } 
     }); 

     Button buttonLoadCamera = (Button) findViewById(R.id.btnCapture); 
     buttonLoadCamera.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // capture picture 
       try 
       { 
        Camera cam=new Camera(); 
        fileUri= cam.captureImage(); 

       } catch (NullPointerException e) { 
        e.printStackTrace(); 
        //Toast.makeText(getBaseContext(), "Error:1 on uplod file", Toast.LENGTH_LONG).show(); 

       } catch (Exception e) { 
        e.printStackTrace(); 
        //Toast.makeText(getBaseContext(), "Error:2 File may be already exists", Toast.LENGTH_LONG).show(); 

       } 





      } 
     }); 


     Button buttonSendData = (Button) findViewById(R.id.btnSend); 
     buttonSendData.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       new PostDataAsyncTask().execute(); 
      } 
     }); 

     Button buttonCancel = (Button) findViewById(R.id.btnCancel); 
     buttonCancel.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       finish(); 
       System.exit(0); 
      } 
     }); 





     /** 
     * Checking GPS 
     * */ 
     //locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     //Toast.makeText(getBaseContext(), "Gps turned on ", Toast.LENGTH_LONG).show(); 
     /**/ 

     //TelephonyManager mTelephonyMgr; 
     //mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 

     //String myPhoneNumber = mTelephonyMgr.getLine1Number(); 
     //myPhoneNumber.substring(2); 

    } 

    /** 
    * Checking GPS 
    * */ 
    public void onLocationChanged(Location location) { 

     String str = "Latitude: "+location.getLatitude()+" Longitude: "+location.getLongitude(); 

     Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderDisabled(String provider) { 
     Toast.makeText(getBaseContext(), "Gps turned off ", Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderEnabled(String provider) { 
     Toast.makeText(getBaseContext(), "Gps turned on ", Toast.LENGTH_LONG).show(); 
    } 
    /**/ 









    /** 
    * Display image from a path to ImageView 
    */ 
    @SuppressLint("SdCardPath") 
    private void previewCapturedImage() { 
     try { 

      // bimatp factory 
      BitmapFactory.Options options = new BitmapFactory.Options(); 

      // downsizing image as it throws OutOfMemory Exception for larger 
      options.inSampleSize = 8; 

      final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(), options); 


      //Saving captured image to sdcard/cers 
      String filaname= Get_next_file_name(); 
      try { 
       FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() + File.separator + "cers"+ File.separator+ filaname+".jpg"); 
       bitmap.compress(Bitmap.CompressFormat.PNG, 80, out); 
       out.close(); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 


      //imgPreview.setImageBitmap(bitmap); 
      IMGS[0] = (ImageView) findViewById(R.id.imageViewphoto1); 
      IMGS[1] = (ImageView) findViewById(R.id.imageViewphoto2); 
      IMGS[2] = (ImageView) findViewById(R.id.imageViewphoto3); 
      IMGS[3] = (ImageView) findViewById(R.id.imageViewphoto4); 
      IMGS[4] = (ImageView) findViewById(R.id.imageViewphoto5); 
      IMGS[5] = (ImageView) findViewById(R.id.imageViewphoto6); 
      IMGS[6] = (ImageView) findViewById(R.id.imageViewphoto7); 
      IMGS[7] = (ImageView) findViewById(R.id.imageViewphoto8); 


      for(int i=0;i<8;i++) 
      { 
       if((String) IMGS[i].getTag()==null) 
       { 
        IMGS[i].setImageBitmap(bitmap); 
        File finalFile = new File(Environment.getExternalStorageDirectory() + File.separator + "cers"+ File.separator+ filaname+".jpg"); 

        FileNameStrings[i]= new String(finalFile.getAbsolutePath().toString()); 
        IMGS[i].setTag("image" +i); 
        IMGS[i].getLayoutParams().height = 100; 
        IMGS[i].getLayoutParams().width = 100; 

        break; 
       } 

      } 


     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } 
    } 

    public String Get_next_file_name() 
    { 
     int fn,ofn=0; 
     String[] filename; 


     // Check for SD Card 
     if (!Environment.getExternalStorageState().equals(
       Environment.MEDIA_MOUNTED)) { 
      Toast.makeText(this, "Error! No SDCARD Found!", Toast.LENGTH_LONG).show(); 
     } else { 
      // Locate the image folder in your SD Card 
      file = new File(Environment.getExternalStorageDirectory() + File.separator +"cers"); 
      // Create a new folder if no folder named SDImageTutorial exist 
      file.mkdirs(); 
     } 

     if (file.isDirectory()) { 
      listFile = file.listFiles(); 

      for (int i = 0; i < listFile.length; i++) { 

       filename =listFile[i].getName().split("."); 

       try 
       { 
        fn=Integer.parseInt(filename[0]); 
        if(ofn<fn) 
        { 
         ofn=fn; 
        } 

        ofn=ofn+1; 
       } 
       catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 

     StringBuilder sb = new StringBuilder(); 
     sb.append(""); 
     sb.append(ofn); 

     return sb.toString(); 
    } 








    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     // if the result is capturing Image 
     if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 
       // successfully captured the image 
       // display it in image view 
       previewCapturedImage(); 
      } else if (resultCode == RESULT_CANCELED) { 
       // user cancelled Image capture 
       Toast.makeText(getApplicationContext(), 
         "User cancelled image capture", Toast.LENGTH_SHORT) 
         .show(); 
      } else { 
       // failed to capture image 
       Toast.makeText(getApplicationContext(), 
         "Sorry! Failed to capture image", Toast.LENGTH_SHORT) 
         .show(); 
      } 
     } 

     // Browse Images 
     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 


      IMGS[0] = (ImageView) findViewById(R.id.imageViewphoto1); 
      IMGS[1] = (ImageView) findViewById(R.id.imageViewphoto2); 
      IMGS[2] = (ImageView) findViewById(R.id.imageViewphoto3); 
      IMGS[3] = (ImageView) findViewById(R.id.imageViewphoto4); 
      IMGS[4] = (ImageView) findViewById(R.id.imageViewphoto5); 
      IMGS[5] = (ImageView) findViewById(R.id.imageViewphoto6); 
      IMGS[6] = (ImageView) findViewById(R.id.imageViewphoto7); 
      IMGS[7] = (ImageView) findViewById(R.id.imageViewphoto8); 


      for(int i=0;i<8;i++) 
      { 
       if((String) IMGS[i].getTag()==null) 
       { 
        //IMGS[i].setImageBitmap(decodeSampledBitmapFromResource(getResources(), R.id.tempimage, 100, 100)); 
        IMGS[i].setImageBitmap(BitmapFactory.decodeFile(picturePath)); 

        File finalFile = new File(picturePath); 

        FileNameStrings[i]= new String(finalFile.getAbsolutePath().toString()); 

        IMGS[i].setTag("image" +i); 
        IMGS[i].getLayoutParams().height = 100; 
        IMGS[i].getLayoutParams().width = 100; 
        IMGS[i].setScaleType(ScaleType.FIT_CENTER); 
        break; 
       } 
      } 


     } 


    } 
} 

Ошибка происходит здесь (класс Camera)

// start the image capture Intent 
startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 

Это камера Класс

package com.example.imagecapture; 

import java.io.File; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.util.Log; 


public class Camera extends Activity{ 

    private Uri fileUri; 
    private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; 
    private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200; 
    public static final int MEDIA_TYPE_IMAGE = 1; 
    public static final int MEDIA_TYPE_VIDEO = 2; 
    private static final String IMAGE_DIRECTORY_NAME = "CERS"; 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

    } 


    public boolean DeviceSupportCamera() 
    { 
     if (!isDeviceSupportCamera()) { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 

    /** 
    * Checking device has camera hardware or not 
    * */ 
    public boolean isDeviceSupportCamera() { 
     if (getApplicationContext().getPackageManager().hasSystemFeature(
      PackageManager.FEATURE_CAMERA)) { 
      // this device has a camera 
      return true; 
     } else { 
      // no camera on this device 
      return false; 
     } 
    } 

    /** 
    * Capturing Camera Image will lauch camera app requrest image capture 
    */ 
    public Uri captureImage() { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

     fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 

     intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

     // start the image capture Intent 
     startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 

     return fileUri; 
    } 

    /** 
    * Here we store the file url as it will be null after returning from camera 
    * app 
    */ 
    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 

     // save file url in bundle as it will be null on scren orientation 
     // changes 
     outState.putParcelable("file_uri", fileUri); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 

     // get the file url 
     fileUri = savedInstanceState.getParcelable("file_uri"); 
    } 



    /** 
    * ------------ Helper Methods ---------------------- 
    * */ 

    /** 
    * Creating file uri to store image 
    */ 
    public Uri getOutputMediaFileUri(int type) { 
     return Uri.fromFile(getOutputMediaFile(type)); 
    } 

    /** 
    * returning image/video 
    */ 
    private static File getOutputMediaFile(int type) { 

     // External sdcard location 
     File mediaStorageDir = new File(
       Environment 
         .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
       IMAGE_DIRECTORY_NAME); 

     // Create the storage directory if it does not exist 
     if (!mediaStorageDir.exists()) { 
      if (!mediaStorageDir.mkdirs()) { 
       Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create " 
         + IMAGE_DIRECTORY_NAME + " directory"); 
       return null; 
      } 
     } 

     // Create a media file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
       Locale.getDefault()).format(new Date()); 
     File mediaFile; 
     if (type == MEDIA_TYPE_IMAGE) { 
      mediaFile = new File(mediaStorageDir.getPath() + File.separator 
        + "IMG_" + timeStamp + ".jpg"); 
     } 
     else if (type == MEDIA_TYPE_VIDEO) { 
      mediaFile = new File(mediaStorageDir.getPath() + File.separator 
        + "VID_" + timeStamp + ".mp4"); 
     } else { 
      return null; 
     } 

     return mediaFile; 
    } 

} 
+0

Check принял ответ здесь: http://stackoverflow.com/questions/5991319/capture-image-from-camera-and-display-in-activity – hoangmeo325

ответ

1

Вы никогда не должны создавать экземпляр класса Activity. Проверьте ответ на Raghav Sood

Can i Create the object of a activity in other class?

Camera cam=new Camera(); 

Вы

public class Camera extends Activity{ 

активность объявлена ​​в манифесте и имеет жизненный цикл. Вместо этого используйте startActivity или startActivityForResult.

Также не требуется

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

} 

Перемещайте захват код изображения в capture_image и использовать startActivityForResult.

+0

Спасибо за ваш ответ. Я попытался захватить код изображения в режиме capture_image. Работает. Но я хочу отделить их. 2. Как это сделать? –

+1

@SajithaRathnayake вы можете иметь его в разных действиях, если хотите, но используйте 'startActivityForresult' и передайте URL-адрес пути назад к предыдущему действию с использованием намерения. Используйте путь для отображения iamge – Raghunandan

+0

Как я могу использовать dialog.setMessage («Uploading file» + textFile); для просмотра текущей загрузки файла ?. Я попытался, но ошибся. –

1

Используйте цель, чтобы начать новый класс.

Intent i = new Intent(capture_image.this, Camera.class); 
startActivity(i); 

ИЛИ

startActivityForResult(i); // if you need to get back a result from Camera class 

Убедитесь, что он объявлен в вашем файле манифеста.

+0

Пожалуйста, дайте мне знать, где поставить эти коды. пожалуйста, используйте мои коды, чтобы показать мне –

Смежные вопросы