문제에 영상입니다.
http://serviceapi.nmv.naver.com/flash/convertIframeTag.nhn?vid=3EDFFA00C810E7F131C89B5051667AA86F18&outKey=V1267a1840e309c53f28126ae0e820ef3dc3244b41b2b57b1b6bb26ae0e820ef3dc32&width=720&height=438
사진 불러오기를 하여 앨범에서 이미지 선택 후 크롭하여 이미지 뷰에 보여줘야 되는데
크롭하고 나서 확인 누르면 그냥 크롭화면 사라지더니 이전 액티비티로 돌아갑니다.
킷캣부터 뭔가 바꼈다고 하는데
package com.example.camera;
import java.io.File;
import com.example.camera.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity implements OnClickListener {
private ImageView mPhotoImageView;// 이미지 받기
private ImageView foot;
private Uri mImageCaptureUri;
private static final int PICK_FROM_CAMERA = 0;
private static final int PICK_FROM_ALBUM = 1;
private static final int CROP_FROM_CAMERA = 2;
LinearLayout bar, mother = null;
FrameLayout container = null;
Bitmap bm = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button mButton = (Button) findViewById(R.id.load);
mPhotoImageView = (ImageView) findViewById(R.id.profile);
mButton.setOnClickListener(this);
}
private void doTakePhotoAction() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 임시로 사용할 파일의 경로를 생성
String url = "tmp.jpg";
mImageCaptureUri = Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), url));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
mImageCaptureUri);
// 특정기기에서 사진을 저장못하는 문제가 있어 다음을 주석처리 합니다.
// intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);
}
private void doTakeAlbumAction() {
// 앨범 호출
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
startActivityForResult(intent, PICK_FROM_ALBUM);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
switch (requestCode) {
case CROP_FROM_CAMERA: {
// 크롭이 된 이후의 이미지를 넘겨 받습니다.
// 이미지뷰에 이미지를 보여준다거나 부가적인 작업 이후에
// 임시 파일을 삭제합니다.
final Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
mPhotoImageView.setImageBitmap(photo);
}
// 임시 파일 삭제
File f = new File(mImageCaptureUri.getPath());
if (f.exists()) {
f.delete();
}
break;
}
case PICK_FROM_ALBUM: {
// 이후의 처리가 카메라와 같으므로 일단 break없이 진행합니다.
// 실제 코드에서는 좀더 합리적인 방법을 선택하시기 바랍니다.
mImageCaptureUri = data.getData();
}
case PICK_FROM_CAMERA: {
// 이미지를 가져온 이후의 리사이즈할 이미지 크기를 결정합니다.
// 이후에 이미지 크롭 어플리케이션을 호출하게 됩니다.
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(mImageCaptureUri, "image/*");
intent.putExtra("outputX", 120);
intent.putExtra("outputY", 130);
// intent.putExtra("aspectX", 1);
// intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_FROM_CAMERA);
break;
}
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.load) {
DialogInterface.OnClickListener cameraListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
doTakePhotoAction();
}
};
DialogInterface.OnClickListener albumListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
doTakeAlbumAction();
}
};
DialogInterface.OnClickListener cancelListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
};
new AlertDialog.Builder(this).setTitle("업로드할 이미지 선택")
.setPositiveButton("사진촬영", cameraListener)
.setNeutralButton("앨범선택", albumListener)
.setNegativeButton("취소", cancelListener).show();
}
}
}
검색은 해봤는데
ACTION_PICK 또는 ACTION_GET_CONTENT
이거 때문인가요?
4.4 부터 ACTION_OPEN_DOCUMENT 이거를 써야 한다고 하는거 같기도 해서요
참고 링크입니다
https://medium.com/marojuns-android/kitkat-4-4-%EC%97%90%EC%84%9C-%EB%A7%9E%EB%8B%A5%EB%9C%A8%EB%A6%B0-%EC%9D%B4%EC%8A%88-%EB%B0%8F-%ED%95%B4%EA%B2%B0-1ecb94c24694
어느 부분을 수정해줘야 하나요?
또
저렇게 해서 테스트하는데 특정사진만 유독 팅기는 현상이 발생합니다.
자르기 기본 크기로 하면 팅기고 자르기 영역을 작게 하면 되구요.
이것도 원인이 있나요?