2011-08-11 3 views
3

2 ~ 3 가지 응용 프로그램에서 응용 프로그램에서 카메라 작업을 사용해야합니다. 사용자가 카메라를 사용하여 사진을 찍은 다음 이미지보기에서 해당 이미지를 설정합니다.Droid X에서 Android 응용 프로그램으로 카메라를 사용하는 방법

Droid X를 제외한 모든 장치에서 작동합니다. 사용자가 Droid X 모바일에서 사진을 찍으면 응용 프로그램이 강제로 닫힙니다. 여기

시작 카메라 활동에 대한 내 코드는 다음과 같습니다

public void startCameraActivity() 
{ 
    _path = Environment.getExternalStorageDirectory() + "/default.jpg"; 
    File file = new File(_path); 
    Uri outputFileUri = Uri.fromFile(file); 

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_PIC_REQUEST) { 
     _taken = true; 

     bita = BitmapFactory.decodeFile(_path); 
     imv.setImageBitmap(bita); 
    } 
}   

그래서 드로이드 X에 성공적으로 카메라 활동을 실행하기 위해 무엇을해야하는지? 나는 그 문제가 무엇인지를 알 수 없었다.

+0

비트 맵으로 인해 메모리 부족 문제가 발생했습니다. 검색을 기반으로합니다. –

+0

이것에 관한 해결책이 있으십니까 ... 어떤 해결책이 있다면 저를 도우십시오. – Kutbi

+0

비트 맵 검색을 검색하십시오. 재활용 방법과 비트 맵을 찾을 수 있습니다. 너는 그에 따라 그것을해야만한다. 설명하기 조금 복잡합니다. 메모리 부족에 근거한 조사를하십시오. –

답변

0

Andro가 이와 유사한 게시물에 댓글을 달았 기 때문에이 문제는 메모리 문제가 아닙니다.

이 문제는 Droid X 카메라의 의도가 다른 장치와 다른 점과 관련이 있습니다.

내 경우에는 "intent.putExtra (MediaStore.EXTRA_OUTPUT, imageUri);"를 사용하여 카메라에 전달한 지정한 URI를 잡아 내려고 할 때 NullPointerException이 발생했습니다. 일부 장치 카메라는이 여분을 적절히 수용하지 않으며 이러한 경우는 별도로 처리해야합니다. (수락 된 대답 here 참조).

또한 내 경우에는 드로이드 X가 2.3.3과 함께 반환 된 의도도 null 값입니다. 내 디버거가 카메라 의도 중에 분리되어 컨트롤 외부에 잘못된 것이 있음을 나타냅니다. 내가 할 수있는 최선의 방법은 수락 된 대답 here을 따르는 것입니다.

그래서 원하는 imageUri이 null이고 반환 된 인 텐트가 null이므로 가장 최근에 찍은 사진을 가져 오는 로직을 추가했습니다 (예 : this 사용).

if (imageUri == null) { 

    String[] projection = new String[] { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME, MediaStore.Images.ImageColumns.DATE_TAKEN, MediaStore.Images.ImageColumns.MIME_TYPE }; 
    final Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC"); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    fileUri = cursor.getString(column_index); 
} 

이 정보가 도움이되기를 바랍니다.

관련 문제