Android

(์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค) ์นด๋ฉ”๋ผ ์ดฌ์˜ ์‚ฌ์ง„ ์—…๋กœ๋“œ ๊ถŒํ•œ ์„ค์ •, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ

567Rabbit 2024. 6. 14. 17:33

fileprovider.xml ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์ž‘์„ฑ

 

 

 

java
๋‹ซ๊ธฐ
<?xml version="1.0" encoding="utf-8"?> <paths> โ€‹โ€‹โ€‹โ€‹<root-path โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹name="root" โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹path="." /> โ€‹โ€‹โ€‹โ€‹<cache-path โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹name="cache" โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹path="." /> <!--Context.getCacheDir() ๋‚ด๋ถ€ ์ €์žฅ์†Œ--> โ€‹โ€‹โ€‹โ€‹<files-path โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹name="files" โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹path="." /> <!--Context.getFilesDir() ๋‚ด๋ถ€ ์ €์žฅ์†Œ--> โ€‹โ€‹โ€‹โ€‹<external-path โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹name="external" โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹path="."/> <!-- Environment.getExternalStorageDirectory() ์™ธ๋ถ€ ์ €์žฅ์†Œ--> โ€‹โ€‹โ€‹โ€‹<external-cache-path โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹name="external-cache" โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹path="."/> <!-- Context.getExternalCacheDir() ์™ธ๋ถ€ ์ €์žฅ์†Œ--> โ€‹โ€‹โ€‹โ€‹<external-files-path โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹name="images" โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹path="Pictures" /> <!-- Context.getExternalFilesDir() ์™ธ๋ถ€ ์ €์žฅ์†Œ--> </paths>

 

 

 

 

 

AndroidManifest.xml ์„ค์ •

 

java
๋‹ซ๊ธฐ
<uses-feature android:name="android.hardware.camera" android:required="true"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

 

 

 

๊ฒ€์ •์ƒ‰์œผ๋กœ ์ง€์šด ๋ถ€๋ถ„์€, ์ž๋™์™„์„ฑ ๋  ๊ฒƒ์ด๋‹ค.

 

 

java
๋‹ซ๊ธฐ
<provider โ€‹โ€‹โ€‹โ€‹android:authorities="com.~.cameraapp.fileprovider" โ€‹โ€‹โ€‹โ€‹android:name="androidx.core.content.FileProvider" โ€‹โ€‹โ€‹โ€‹android:exported="false" โ€‹โ€‹โ€‹โ€‹android:grantUriPermissions="true"> โ€‹โ€‹โ€‹โ€‹<meta-data โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹android:name="android.support.FILE_PROVIDER_PATHS" โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹android:resource="@xml/fileprovider"/> </provider>

 

 

 

 

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

 

build.gradle.kts(:app) ์—์„œ, ๋งจ ์•„๋žซ์ค„ ์ž‘์„ฑ.

 

 

Sync now ํ•ด์ฃผ๊ธฐ.

 

 

 

 

 

activity_main.xml ์ž‘์„ฑํ•˜๊ธฐ

 

 

 

 

 

strings.xml ์ž‘์„ฑํ•˜๊ธฐ

 

resource -> strings.xml ์—์„œ ์ž‘์„ฑํ•ด์ค€๋‹ค. (alert-Dialog๋Š” ํŒ์—…์ฐฝ์ด๋‹ค.)

 

 

 

 

 

 

MainActivity.java

 

์ฝ”๋“œ ๋ฐ‘๋ถ€๋ถ„์˜ ํฌ์ŠคํŒ… ๊ธ€๊นŒ์ง€ ๋๊นŒ์ง€ ์ฐธ๊ณ ํ•ด์•ผ ํ•œ๋‹ค.

java
๋‹ซ๊ธฐ
package com.~.cameraapp; import android.annotation.SuppressLint; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.media.ExifInterface; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.ParcelFileDescriptor; import android.provider.MediaStore; import android.provider.OpenableColumns; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; import org.apache.commons.io.IOUtils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import android.Manifest; public class MainActivity extends AppCompatActivity { โ€‹โ€‹โ€‹โ€‹Button button; โ€‹โ€‹โ€‹โ€‹ImageView imageView; โ€‹โ€‹โ€‹โ€‹File photoFile; โ€‹โ€‹โ€‹โ€‹@Override โ€‹โ€‹โ€‹โ€‹protected void onCreate(Bundle savedInstanceState) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹super.onCreate(savedInstanceState); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹setContentView(R.layout.activity_main); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹button = findViewById(R.id.button); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹imageView = findViewById(R.id.imageView); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹// ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด, ์นด๋ฉ”๋ผ๋กœ ์ฐ์„๊ฒƒ์ธ์ง€, ์•จ๋ฒ”์—์„œ ๊ณ ๋ฅผ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹// ์•Œ๋ŸฌํŠธ ๋‹ค์ด์–ผ๋กœ๊ทธ ๋„์šด๋‹ค. โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹button.setOnClickListener(new View.OnClickListener() { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹@Override โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹public void onClick(View view) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹showDialog(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹}); โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹private 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){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹// ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ ๋ˆŒ๋ €์„๋•Œ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹// ์นด๋ฉ”๋ผ๋กœ ์‚ฌ์ง„์ฐ๊ธฐ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹camera(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹}else if(i == 1){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹// ๋‘๋ฒˆ์งธ ํ•ญ๋ชฉ ๋ˆŒ๋ €์„๋•Œ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹album(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹}); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹builder.show(); โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹private void camera(){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹int permissionCheck = ContextCompat.checkSelfPermission( โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹MainActivity.this, Manifest.permission.CAMERA); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if(permissionCheck != PackageManager.PERMISSION_GRANTED){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ActivityCompat.requestPermissions(MainActivity.this, โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹new String[]{android.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.~.cameraapp.fileprovider", photoFile); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹i.putExtra(MediaStore.EXTRA_OUTPUT, fileProvider); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹startActivityForResult(i, 100); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} else{ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.makeText(MainActivity.this, "์ดํฐ์—๋Š” ์นด๋ฉ”๋ผ ์•ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.", โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.LENGTH_SHORT).show(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹private void album(){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if(checkPermission()){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹displayFileChoose(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹}else{ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹requestPermission(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹private boolean checkPermission(){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹int result = ContextCompat.checkSelfPermission(MainActivity.this, โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Manifest.permission.WRITE_EXTERNAL_STORAGE); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if(result == PackageManager.PERMISSION_DENIED){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹return false; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹}else{ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹return true; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹private void requestPermission() { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Manifest.permission.WRITE_EXTERNAL_STORAGE)){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Log.i("DEBUGGING5", "true"); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.makeText(MainActivity.this, "๊ถŒํ•œ ์ˆ˜๋ฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.LENGTH_SHORT).show(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹}else{ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Log.i("DEBUGGING6", "false"); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ActivityCompat.requestPermissions(MainActivity.this, โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 500); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹private void displayFileChoose() { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Intent i = new Intent(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹i.setType("image/*"); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹i.setAction(Intent.ACTION_GET_CONTENT); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹startActivityForResult(Intent.createChooser(i, "SELECT IMAGE"), 300); โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹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; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹@Override โ€‹โ€‹โ€‹โ€‹public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹super.onRequestPermissionsResult(requestCode, permissions, grantResults); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹switch (requestCode) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹case 1000: { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.makeText(MainActivity.this, "๊ถŒํ•œ ํ—ˆ๊ฐ€ ๋˜์—ˆ์Œ", โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.LENGTH_SHORT).show(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} else { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.makeText(MainActivity.this, "์•„์ง ์Šน์ธํ•˜์ง€ ์•Š์•˜์Œ", โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.LENGTH_SHORT).show(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹break; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹case 500: { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.makeText(MainActivity.this, "๊ถŒํ•œ ํ—ˆ๊ฐ€ ๋˜์—ˆ์Œ", โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.LENGTH_SHORT).show(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} else { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.makeText(MainActivity.this, "์•„์ง ์Šน์ธํ•˜์ง€ ์•Š์•˜์Œ", โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Toast.LENGTH_SHORT).show(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹@Override โ€‹โ€‹โ€‹โ€‹protected void onActivityResult(int requestCode, int resultCode, Intent data) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if(requestCode == 100 && resultCode == RESULT_OK){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Bitmap photo = BitmapFactory.decodeFile(photoFile.getAbsolutePath()); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ExifInterface exif = null; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹try { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹exif = new ExifInterface(photoFile.getAbsolutePath()); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} catch (IOException e) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹e.printStackTrace(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ExifInterface.ORIENTATION_UNDEFINED); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹photo = rotateBitmap(photo, orientation); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹// ์••์ถ•์‹œํ‚จ๋‹ค. ํ•ด์ƒ๋„ ๋‚ฎ์ถฐ์„œ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹OutputStream os; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹try { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹os = new FileOutputStream(photoFile); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹photo.compress(Bitmap.CompressFormat.JPEG, 25, os); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹os.flush(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹os.close(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} catch (Exception e) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Log.e(getClass().getSimpleName(), "Error writing bitmap", e); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹photo = BitmapFactory.decodeFile(photoFile.getAbsolutePath()); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹imageView.setImageBitmap(photo); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹// ๋„คํŠธ์›Œํฌ๋กœ ๋ฐ์ดํ„ฐ ๋ณด๋‚ธ๋‹ค. โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹}else if(requestCode == 300 && resultCode == RESULT_OK && data != null && โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹data.getData() != null){ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Uri albumUri = data.getData( ); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹String fileName = getFileName( albumUri ); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹try { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ParcelFileDescriptor parcelFileDescriptor = getContentResolver( ).openFileDescriptor( albumUri, "r" ); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if ( parcelFileDescriptor == null ) return; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹FileInputStream inputStream = new FileInputStream( parcelFileDescriptor.getFileDescriptor( ) ); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹photoFile = new File( this.getCacheDir( ), fileName ); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹FileOutputStream outputStream = new FileOutputStream( photoFile ); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹IOUtils.copy( inputStream, outputStream ); // //์ž„์‹œํŒŒ์ผ ์ƒ์„ฑ // File file = createImgCacheFile( ); // String cacheFilePath = file.getAbsolutePath( ); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹// ์••์ถ•์‹œํ‚จ๋‹ค. ํ•ด์ƒ๋„ ๋‚ฎ์ถฐ์„œ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Bitmap photo = BitmapFactory.decodeFile(photoFile.getAbsolutePath()); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹OutputStream os; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹try { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹os = new FileOutputStream(photoFile); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹photo.compress(Bitmap.CompressFormat.JPEG, 25, os); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹os.flush(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹os.close(); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} catch (Exception e) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹Log.e(getClass().getSimpleName(), "Error writing bitmap", e); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹imageView.setImageBitmap(photo); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); // imageView.setImageBitmap( getBitmapAlbum( imageView, albumUri ) ); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} catch ( Exception e ) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹e.printStackTrace( ); โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹// ๋„คํŠธ์›Œํฌ๋กœ ๋ณด๋‚ธ๋‹ค. โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹super.onActivityResult(requestCode, resultCode, data); โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹//์•จ๋ฒ”์—์„œ ์„ ํƒํ•œ ์‚ฌ์ง„์ด๋ฆ„ ๊ฐ€์ ธ์˜ค๊ธฐ โ€‹โ€‹โ€‹โ€‹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; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹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; โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹} }

 

 

 

 

!!!!!! ๊ผญ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ถ€๋ถ„ !!!!!  ๋นจ๊ฐ„ ๋ฐ‘์ค„ ์นœ ๋ถ€๋ถ„์„ ๋ฐ”๊ฟ”์ค˜์•ผํ•œ๋‹ค.

 

 

 

 

Manifest์—์„œ ํ˜•๊ด‘ํŽœ ๋ถ€๋ถ„์„ ๋ณต์‚ฌํ•˜์—ฌ ์œ„์˜ ๋นจ๊ฐ„ ๋ฐ‘์ค„ ๋ถ€๋ถ„์— ๋ถ™์—ฌ๋„ฃ๋Š”๋‹ค.