我尝试裁剪在相机应用程序上拍摄的图像,但是在拍摄照片库应用程序后无法正常工作并停止...
这样的错误消息。 请帮我。 我已经花了十多个小时...
07-23 14:35:27.455 12451-12451/? E/Zygote: isWhitelistProcess - Process is Whitelisted
07-23 14:35:27.455 12451-12451/? E/libpersona: scanKnoxPersonas
Couldn't open the File - /data/system/users/0/personalist.xml - No such file or directory
07-23 14:35:27.458 12451-12451/? W/SELinux: SELinux selinux_android_compute_policy_index : Policy In
活动
public class RegisterActivity extends AppCompatActivity {
EditText register_id, register_pw, register_pw2, register_state, register_nickname;
Button btn_register, btn_profile, btn_check;
CircleImageView register_profile;
User user;
Bitmap thePic;
private static final int PICK_FROM_CAMERA=1;
private static final int PICK_FROM_GALLERY = 2;
private static final int CROP_PIC = 3;
private Uri picUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
register_id = (EditText) findViewById(R.id.register_id);
register_pw = (EditText) findViewById(R.id.register_pw);
register_pw2 = (EditText) findViewById(R.id.register_pw2);
register_state = (EditText) findViewById(R.id.register_state);
btn_register = (Button) findViewById(R.id.btn_register);
btn_profile = (Button) findViewById(R.id.btn_profile);
btn_check = (Button) findViewById(R.id.btn_check);
register_profile = (CircleImageView) findViewById(R.id.register_profile);
register_nickname = (EditText) findViewById(R.id.register_nickname);
btn_check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences check = RegisterActivity.this.getSharedPreferences("USERINFO", MODE_PRIVATE);
String checkId = check.getString(register_id.getText().toString(), null);
// id 입력창에 입력된 값을 checkId 에 대입하고 해당하는 id가 USERINFO 에 존재하는지 확인한다.
if (checkId == null) {
Toast.makeText(RegisterActivity.this, "사용 가능한 ID 입니다.", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(RegisterActivity.this, "이미 존재하는 ID 입니다.", Toast.LENGTH_SHORT).show();
}
}
}); //중복체크 버튼
btn_profile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Button btn_camera;
Button btn_gallery;
AlertDialog.Builder dialog = new AlertDialog.Builder(RegisterActivity.this);
dialog.setTitle("프로필 사진 등록")
.setNeutralButton("취소", null)
.setPositiveButton("카메라", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
int permissionCheck = ContextCompat.checkSelfPermission(RegisterActivity.this, Manifest.permission.CAMERA);
if(permissionCheck == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(RegisterActivity.this, new String[]{Manifest.permission.CAMERA}, 0);
} // 카메라 권한이 없는 경우, 권한을 요청한다.
else {
try {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File mfile = new File(Environment.getExternalStorageDirectory(), "file" + String.valueOf(System.currentTimeMillis()) + ".jpg");
// picUri = Uri.fromFile(mfile);
picUri = FileProvider.getUriForFile(RegisterActivity.this,
getApplicationContext().getPackageName() + ".fileprovider", mfile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, picUri);
intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);
} catch (ActivityNotFoundException anfe) {
String errorMessage = "이 기기에서는 IMAGE_CAPTURE 기능을 지원하지 않습니다.";
Toast.makeText(RegisterActivity.this, errorMessage, Toast.LENGTH_SHORT).show();
}
} // 카메라 권한이 있는 경우, 카메라 앱을 실행한다.
}
}) // 카메라에서 사진 등록
.setNegativeButton("갤러리", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intent2 = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
try{
intent2.setType("image/*");
startActivityForResult(intent2, PICK_FROM_GALLERY);
} catch (ActivityNotFoundException e) {
// Do nothing for now
}
}
}) // 갤러리에서 사진 등록
.show();
}
}); // 사진등록 버튼
} // onCreate
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==PICK_FROM_CAMERA && resultCode==RESULT_OK){
//register_profile.setImageURI(picUri);
performCrop();
// if(data != null) {
// picUri = data.getData();
// performCrop();
// } else if (data == null){
// Log.d("CAMERA ERROR", "data 가 null 임");
// }
} // 카메라에서 찍은 사진을 가져오는 경우
else if(requestCode==PICK_FROM_GALLERY && resultCode==RESULT_OK) {
picUri = data.getData();
performCrop();
} // 갤러리에 저장된 사진을 가져오는 경우
else if(requestCode == CROP_PIC && resultCode==RESULT_OK) {
Bundle extras = data.getExtras();
thePic = extras.getParcelable("data");
register_profile.setImageBitmap(thePic);
} // 사진을 가져와 CROP 하는 부분
} // 사진을 받아와 프로필 사진에 저장하는 부분
private void performCrop() {
try {
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(picUri, "image/*");
cropIntent.putExtra("crop", true);
cropIntent.putExtra("OutputX", 130);
cropIntent.putExtra("OutputY", 130);
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
cropIntent.putExtra("return-data", true);
startActivityForResult(cropIntent, CROP_PIC);
} catch(ActivityNotFoundException e) {
Toast.makeText(this, "이 장치는 CROP 을 지원하지 않습니다.", Toast.LENGTH_SHORT).show();
}
} // 이미지를 잘라내어 그 결과를 보낸다.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==0) {
if(grantResults[0]==0) {
Toast.makeText(this, "카메라 권한 승인", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this, "카메라 권한 거절됨", Toast.LENGTH_SHORT).show();
}
}
}
}