안드로이드 개발 질문/답변
(글 수 45,052)
package kyu.project.mycloth;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
public class ImageLoader extends Activity {
public static final String EXTRAS_KEY = "type";
public static final String EXTRAS_CAMERA = "camera";
public static final String EXTRAS_ALBUM = "album";
public static final int PICK_FROM_CAMERA = 0;
public static final int PICK_FROM_ALBUM = 1;
Bitmap bitmap;
String path;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String type = getIntent().getStringExtra(EXTRAS_KEY);
if (type.equals(EXTRAS_CAMERA)) {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, PICK_FROM_CAMERA);
} else if (type.equals(EXTRAS_ALBUM)) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
startActivityForResult(intent, PICK_FROM_ALBUM);
}
}
private static final String[] IMAGE_PROJECTION = {
MediaStore.Images.ImageColumns.DATA,
MediaStore.Images.Thumbnails.DATA };
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case PICK_FROM_CAMERA:
final Uri uriImages = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// final Uri uriImagesthum = MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI;
final Cursor cursorImages = getContentResolver().query (
uriImages, IMAGE_PROJECTION, null, null, null);
if (cursorImages != null && cursorImages.moveToLast()) {
String imageUrl = cursorImages.getString(0);
cursorImages.close();
bitmap = (Bitmap)data.getExtras().get("data");
path = data.getStringExtra("imageUrl");
data.putExtra("imageUrl", imageUrl);
setResult(resultCode, data);
}
break;
case PICK_FROM_ALBUM:
Cursor cursor = getContentResolver().query(data.getData(),
null, null, null, null);
if (cursor.moveToNext()) {
String imageUrl = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA));
bitmap = (Bitmap)data.getExtras().get("data");
path = data.getStringExtra("imageUrl");
data.putExtra("data", BitmapFactory.decodeFile(imageUrl));
data.putExtra("imageUrl", imageUrl);
setResult(resultCode , data);
}
break;
}
}
finish();
}
public static void doTakeAlbumAction(Activity activity) {
Intent intent = new Intent(activity , ImageLoader.class);
intent.putExtra(ImageLoader.EXTRAS_KEY, ImageLoader.EXTRAS_ALBUM);
activity.startActivityForResult(intent, ImageLoader.PICK_FROM_ALBUM);
}
public static void doTakePhotoAction(Activity activity) {
Intent intent = new Intent(activity , ImageLoader.class);
intent.putExtra(ImageLoader.EXTRAS_KEY, ImageLoader.EXTRAS_CAMERA);
activity.startActivityForResult(intent, ImageLoader.PICK_FROM_CAMERA);
}
}
카메라 이미지 호출 소스인데요. 인터넷 검색중 찾은 정보입니다. 하지만 사용을 어떻게 해야할지 모르겠네요.
하고싶은 작업은 원페이지에서
case R.id.camerabtn:
ImageLoader.doTakePhotoAction(this);
break;
case R.id.albumbtn:
ImageLoader.doTakeAlbumAction(this);
break;
이렇게 호출 해서 이미지를 사진찍은 것이나 앨범에서 선택한 사진으로 바꾸고
이미지의 경로를 가져와야 합니다.(데이터베이스 경로저장용)
멘탈이 붕괴되네요 충고좀해주세요.
카메라는 디바이스 카메라를 쓰시면 간단히 검색하면 나오구요.. 그렇지 않으면 카메라 액티비티로 인텐트 하나 날리면 되구요.
앨범 같은경우는
intent = new Intent();
intent.setAction(Intent.ACTION>GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, REQUESTCODE);
이렇게 하시면 되겠네요.
경로는 데이터 베이스에 저장할때 그 경로를 가지고 오면 되지 않나요?
즉 카메라는 카메라에서 찍을때 저장하는 경로를 가지고 오면 되고..
앨범같은 경우에는
if(requestCode == SELECT_IMAGE) {
Uri = uri = intent.getData();
패스 = getPath(uri);
}
이렇게 해서 경로 가져오시면 되는데 간혹... 저 경로가 제대로 못가져오는 경우도 있거든요..?
그럴 경우에는 제가 tip에 real 경로 가져오는 메소드 올려놨어요..
그아이 뒤집어 쒸우면 됩니다.
이상입니다.