2014-09-10 185 views
0

我已經從我的活動啓動相機應用程序下面的代碼:相機照片拍攝失敗

private Uri imageUri; 
private void takeCameraPhoto() { 
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, 
      Uri.fromFile(photo)); 
    imageUri = Uri.fromFile(photo); 
    startActivityForResult(intent, TAKE_PICTURE); 
} 

當用戶拍攝照片並選擇它,我,我有我的onActivtyResult方法得到的回調於Android這樣寫:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case TAKE_PICTURE: 
     if (resultCode == Activity.RESULT_OK) { 
      tempView.setVisibility(View.INVISIBLE); 
      Uri selectedImage = imageUri; 
      getContentResolver().notifyChange(selectedImage, null); 
      ContentResolver cr = getContentResolver(); 

      try { 
       imageBMP = android.provider.MediaStore.Images.Media 
        .getBitmap(cr, selectedImage); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      int width = getResources().getDisplayMetrics().widthPixels; 
      int height = getResources().getDisplayMetrics().heightPixels; 
      String newFilePath = selectedImage.toString().replace("file:///mnt/", "/"); 


      imageBMP = ShrinkBitmap(newFilePath, width, height); 
      imageView.setImageBitmap(imageBMP); 
      Matrix m1= imageView.getImageMatrix(); 
      RectF drawableRect1 = new RectF(0, 0, imageBMP.getWidth(), imageBMP.getHeight()); 
      RectF viewRect1 = new RectF(0, 0, width - 50, height - 100); 
      m1.setRectToRect(drawableRect1, viewRect1, Matrix.ScaleToFit.CENTER); 
      matrix.set(m1); 
      imageBMP = null; 
      System.gc(); 
      /*Toast.makeText(this, selectedImage.toString(), 
         Toast.LENGTH_LONG).show();*/ 
     }else{ 
      if (!isFromDialog) { 
       PhotoDecorationActivity.this.finish(); 
      } 

     } 

     break; 

搭載Android 4.4版本,我得到的NullPointerException這imageBMP爲null,這是因爲空newFilePath變量的可能。什麼是正確的代碼捕捉從相機的圖像和接收它在我的activity.Can人幫助我請。

回答

1

試試這個

//This code is for launching the camera activity 

    Integer cam = 0; 
    Boolean gpicture; 
    Intent action = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
          startActivityForResult(action, cam); 



//This is the code used to handle the request and display it on a bitmap 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 

//process image gotten from gallery 
       if (requestCode == cam && resultCode == Activity.RESULT_OK) { 

        gpicture = true; 

        Uri selectedImage = data.getData(); 
        final String location = data.getDataString(); 

        Bitmap bitmap = null; 

        try { 
         bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage)); 
        } catch (FileNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        pic.setImageBitmap(bitmap); 
} 
    } 

該代碼只是用來從相機獲得的圖像和位圖顯示它,希望它可以幫助你

+0

是什麼Add_customer.RESULT_OK – Sandeep 2014-09-10 10:49:06

+0

對不起它的Activity.RESULT_OK ....我現在編輯我的答案...您也可以使用您的活動名稱 – danidee 2014-09-10 10:58:23