2012-06-06 3 views
1

SD 카드에 내 자신의 디렉토리에 JPG 이미지를 저장합니다 jpeg을 위의 디렉토리에 저장하지만 미디어 저장소를 사용하고 있기 때문에 알 수 없습니다. 이 일을하기위한 조언.어떻게 줄 변경을 다음에 다음 코드를 업데이트했지만 작동하지 않았다

import android.app.Activity; 
import android.content.ContentValues; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class AndroCamera extends Activity { 
    private static final int IMAGE_CAPTURE = 0; 
    private Button startBtn; 
    private Uri imageUri; 
    private ImageView imageView; 

/** Called when the activity is first created. 
* sets the content and gets the references to 
* the basic widgets on the screen like 
* {@code Button} or {@link ImageView} 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    imageView = (ImageView)findViewById(R.id.img); 
    startBtn = (Button) findViewById(R.id.startBtn); 
    startBtn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startCamera(); 
     } 
    }); 
} 

public void startCamera() { 
    Log.d("ANDRO_CAMERA", "Starting camera on the phone..."); 
    String fileName = "testphoto.jpg"; 
    ContentValues values = new ContentValues(); 
    values.put(MediaStore.Images.Media.TITLE, fileName); 
    values.put(MediaStore.Images.Media.DESCRIPTION, 
      "Image capture by camera"); 
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 
    imageUri = getContentResolver().insert(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
    startActivityForResult(intent, IMAGE_CAPTURE); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == IMAGE_CAPTURE) { 
     if (resultCode == RESULT_OK){ 
      Log.d("ANDRO_CAMERA","Picture taken!!!"); 
      imageView.setImageURI(imageUri); 
     } 
    } 
} 

}

+0

매니페스트에 적절한 권한을 추가 했습니까? 외부 저장소에 쓸 수있는 권한이 필요합니다. 확신이 없으면 여기에 manifest.xml 파일을 게시하십시오. –

답변

4

먹으 렴 Uri 당신은 당신이에 저장하려는 정의 Uri를 사용하는 경우는 아마도, 미디어 매니저에서이다 사용하고,이 작업을해야하기 때문이다. 이에

mImageUri= Uri.fromFile(new File(Environment.getExternalStorageDirectory(), 
         "pic_" + String.valueOf(System.currentTimeMillis()) + ".jpg")); 

이 루트에 저장된하지만, 당신이 파일을 생성하기 때문에 당신이 원하는 목적지에, 당신이 배치 할 수 있습니다 : 여기에 힌트입니다. 디렉토리가 존재하는지 확인하십시오. 그렇지 않으면 디렉토리가 작성됩니다. 그리고 @ 사이먼 (Simon)은 외부 저장소에 쓸 수있는 권한이 있는지 확인했습니다.

업데이트 1 : 현재, 당신은 뭔가 같은 :

imageUri = getContentResolver().insert(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

그래서 삽입 만 MediaStore 테이블에 이미지를 삽입하는 ... 있지만 그게 당신이 실제로 필요, 당신은 필요한 경우 Data 열을 MediaStore으로 대체하십시오. 이처럼 contentValues 뭔가에 추가 : 당신이 MediaStore 테이블을 사용할 필요가없는 경우 다음 삽입 따라서 ContentValues이 필요하지 않은 작업을 수행 할 필요가

values.put(MediaStore.Images.ImageColumns.DATA, fullPath); 

없습니다.

+0

mediastore는 어떻게 제거해야합니까? – user1024882

+0

방금 ​​내 대답을 편집 했으므로 조금 더 잘 이해할 수 있습니다. – Raykud

+0

문자열 fullPath = "/GV-Skynet/images/t1.jpg"; 파일 file = 새 파일 (Environment.getExternalStorageDirectory() + "/GV-Skynet/images/t1.jpg"); Uri imageUri = Uri.fromFile (file); imageUri = getContentResolver(). 삽입 ( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 값); values.put (MediaStore.Images.ImageColumns.DATA, fullPath); 인 텐트 intent = 새 인 텐트 (MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra (MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra (MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult (intent, IMAGE_CAPTURE); – user1024882

관련 문제