버튼을 누르면 바로 알러트 다이얼로그 띄우는 함수만들기
// 알러트 다이얼로그 띄우는 함수
void showDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(R.string.alert_title);
builder.setItems(R.array.alert_photo, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if (i == 0){
// todo : 사진찍는 코드 실행
camera();
} else if (i == 1){
// todo : 앨범에서 사진 가져오는 코드 실행
album();
}
}
});
AlertDialog alert = builder.create();
alert.show();
}
2개의 파라미터 (앨범에서 찾기, 카메라로 찍기)
strings
build.gradle 에서
implementation 'commons-io:commons-io:2.4'
메인
i가 첫번째 누른건지(사진찍기) 두번째꺼 누른건지(앨범에서) 확인 가능
각 각의 함수를 만들어 주기
private void camera(){
int permissionCheck = ContextCompat.checkSelfPermission(
MainActivity.this, Manifest.permission.CAMERA);
if(permissionCheck != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CAMERA} ,
1000);
Toast.makeText(MainActivity.this, "카메라 권한 필요합니다.",
Toast.LENGTH_SHORT).show();
return;
} else {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(i.resolveActivity(MainActivity.this.getPackageManager()) != null ){
// 사진의 파일명을 만들기
String fileName = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
photoFile = getPhotoFile(fileName);
Uri fileProvider = FileProvider.getUriForFile(MainActivity.this,
"com.blockent.camera.fileprovider", photoFile);
i.putExtra(MediaStore.EXTRA_OUTPUT, fileProvider);
startActivityForResult(i, 100);
} else{
Toast.makeText(MainActivity.this, "이폰에는 카메라 앱이 없습니다.",
Toast.LENGTH_SHORT).show();
}
}
private File getPhotoFile(String fileName) {
File storageDirectory = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
try{
return File.createTempFile(fileName, ".jpg", storageDirectory);
}catch (IOException e){
e.printStackTrace();
return null;
}
}
카메라 권한 허용,
앨범권한
private void requestPermission() {
if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)){
Toast.makeText(MainActivity.this, "권한 수락이 필요합니다.",
Toast.LENGTH_SHORT).show();
}else{
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 500);
}
}
private boolean checkPermission(){
int result = ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(result == PackageManager.PERMISSION_DENIED){
return false;
}else{
return true;
}
}
onActibityResult 복사
public static Bitmap rotateBitmap(Bitmap bitmap, int orientation) {
Matrix matrix = new Matrix();
switch (orientation) {
case ExifInterface.ORIENTATION_NORMAL:
return bitmap;
case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
matrix.setScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
matrix.setRotate(180);
break;
case ExifInterface.ORIENTATION_FLIP_VERTICAL:
matrix.setRotate(180);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_TRANSPOSE:
matrix.setRotate(90);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_90:
matrix.setRotate(90);
break;
case ExifInterface.ORIENTATION_TRANSVERSE:
matrix.setRotate(-90);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
matrix.setRotate(-90);
break;
default:
return bitmap;
}
try {
Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
bitmap.recycle();
return bmRotated;
}
catch (OutOfMemoryError e) {
e.printStackTrace();
return null;
}
}
다시 onActibityResult 에서 사진에 맞게
elseif는 앨범사진 관련 코드들
먼저 getfileName 임포트
//앨범에서 선택한 사진이름 가져오기
public String getFileName( Uri uri ) {
Cursor cursor = getContentResolver( ).query( uri, null, null, null, null );
try {
if ( cursor == null ) return null;
cursor.moveToFirst( );
@SuppressLint("Range") String fileName = cursor.getString( cursor.getColumnIndex( OpenableColumns.DISPLAY_NAME ) );
cursor.close( );
return fileName;
} catch ( Exception e ) {
e.printStackTrace( );
cursor.close( );
return null;
}
}
앨범앱에 보여주기
// todo : 사진찍는 코드 실행
camera();
} else if (i == 1){
// todo : 앨범에서 사진 가져오는 코드 실행
album();
}
}
});
AlertDialog alert = builder.create();
alert.show();
}
'android studio' 카테고리의 다른 글
안드로이드 스튜디오 카카오 로그인 구현 (0) | 2023.03.24 |
---|---|
[안드로이드] 안드로이드스튜디오 구글기본 tts 사용 (0) | 2023.03.22 |
[android] Intent ACTION_VIEW Uri.parse 외부 액티비티 띄우기 (0) | 2023.02.07 |
[android] 이미지 처리를 위한 Glide 라이브러리 사용법 (0) | 2023.02.07 |
[android] ActionBar menu 사용하는 방법 (0) | 2023.02.06 |