2013-02-21 2 views
0

카메라로 찍은 그림의 경로를 문자열로 가져 오려고합니다. 내 코드로 사진을 찍으려고하면 문자열이 비어 있습니다. 내 앱을 닫을 때 카메라 앱을 열고 사진을 찍은 다음 내 앱을 다시 열고 코드를 사용하면 카메라 앱으로 찍은 마지막 사진의 문자열을 가져옵니다. 내 질문은 내 카메라 의도가 작동하지 않는 이유이며 카메라 앱을 사용할 때 왜 작동합니까?카메라 의도 그림 파일 경로

public void onClick(View arg0) { 
    switch (arg0.getId()) {  
     case R.id.btnImageCapture: 
     Intent openCamera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(openCamera, OPEN_CAMERA); 
        break; 
    } 
} 

private String getLastImagePath() { 
      final String[] imageColumns = { MediaStore.Images.Media._ID, 
        MediaStore.Images.Media.DATA }; 
      final String imageOrderBy = MediaStore.Images.Media._ID + " DESC"; 
      Cursor imageCursor = managedQuery(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, 
        null, null, imageOrderBy); 
      if (imageCursor.moveToFirst()) { 
       String fullPath = imageCursor.getString(imageCursor 
         .getColumnIndex(MediaStore.Images.Media.DATA)); 
       imageCursor.close(); 
       return fullPath; 
      } 
     } 

 @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch(requestCode){ 
     case OPEN_CAMERA: 
      if (resultCode == RESULT_OK && data != null) { 
       String picturePath = getLastImagePath(); 
       break; 
      } 
      } 
     } 
+0

가 왜 onActivityResult를 당신에게 주어진 것 이미지의 URI를 사용하지 것이다 .. 작동? data.getData(); – dymmeh

+0

파일 경로가 필요하기 때문입니다. ;) –

+0

우리 대답을 사용하여 나의 대답을 시험해 보라. – dymmeh

답변

2

이 시도 :

여기 내 코드입니다. 그것은

private Uri imageUri; 

    public void onClick(View arg0) { 
    switch (arg0.getId()) {  
     case R.id.btnImageCapture: 

    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, OPEN_CAMERA); 
        break; 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case OPEN_CAMERA: 
     if (resultCode == Activity.RESULT_OK) { 
      Uri selectedImage = imageUri; 
      getContentResolver().notifyChange(selectedImage, null); 
      ImageView imageView = (ImageView) findViewById(R.id.ImageView); 
      ContentResolver cr = getContentResolver(); 
      Bitmap bitmap; 
      try { 
       bitmap = android.provider.MediaStore.Images.Media 
       .getBitmap(cr, selectedImage); 

       imageView.setImageBitmap(bitmap); 
       Toast.makeText(this, selectedImage.toString(), 
         Toast.LENGTH_LONG).show(); 

      } catch (Exception e) { 
       Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT) 
         .show(); 

      } 
     } 
    } 
} 
+0

SQLite db에 저장해야하므로 파일 경로가 필요합니다. –

+0

네, 내 대답에서 얻을 수 있습니다 .. – moDev

+0

그것은 작동합니까 ?? – moDev

관련 문제