문제를 저장하는 기능 부분을 구현하였다.
앨범의 이미지에 접근해야하기 때문에 권한을 추가하였다.
AndroidManifest.xml 파일에 권한을 추가했다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
위험권한을 부여하는 기능을 구현했다.
위험권한 부여를 위한 외부 라이브러리를 build.gradle에 추가했다.
implementation 'com.yanzhenjie:permission:2.0.3'
외부 라이브러리를 이용해 MainActivity.java에 위험 권한을 부여하는 코드를 추가하였다.
AndPermission.with(this)
.runtime()
.permission(Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE)
.onGranted(new Action<List<String>>() {
@Override
public void onAction(List<String> data) {
Toast.makeText(MainActivity.this, "허용된 권한 개수 : " + data.size(), Toast.LENGTH_SHORT).show();
}
})
.onDenied(new Action<List<String>>() {
@Override
public void onAction(List<String> data) {
Toast.makeText(MainActivity.this, "거부된 권한 개수 : " + data.size(), Toast.LENGTH_SHORT).show();
}
})
.start();
레이아웃을 수정하였다.
제목을 입력하는 텍스트 입력창, 이미지를 선택하는 버튼, 선택된 이미지를 보여주는 이미지뷰를 추가했다.

SaveFragment.java 파일에 코드를 추가했다.
이미지 선택 버튼을 누르면 앨범을 띄우고 이미지를 선택하도록 만들었다.
이미지를 선택하면 선택한 이미지를 imageView에 띄우도록 하였다.
buttonSetImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openGallery();
}
});
...
public void openGallery(){
Intent intent = new Intent();
// MIME 타입이 image로 시작하는 데이터 가져오기
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 101);
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 101){
Uri fileUri = data.getData();
ContentResolver resolver = getActivity().getContentResolver();
try{
InputStream instream = resolver.openInputStream(fileUri);
imgBitmap = BitmapFactory.decodeStream(instream);
imageView.setImageBitmap(imgBitmap);
instream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
저장하기 버튼을 누르면 내부 저장소에 이미지를 저장하고, 데이터베이스에 문제 데이터를 저장하도록 하였다.
데이터베이스 저장 부분은 추후 데이터베이스 구현시 추가할 예정이다.
buttonSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
solveLink = editTextLink.getText().toString();
title = editTextTitle.getText().toString().replaceAll("\\s", "_");
if(title == null || title.equals("")){
Toast.makeText(getActivity(), "제목을 입력해주세요.", Toast.LENGTH_SHORT).show();
}else if(solveLink == null || solveLink.equals("")){
Toast.makeText(getActivity(), "풀이 링크를 입력해주세요.", Toast.LENGTH_SHORT).show();
}else{
imgName = title + ".png";
saveBitmapToJpeg(imgBitmap);
imageAddress = getActivity().getCacheDir() + "/" + imgName;
/*
데이터베이스에 id / 제목 / 날짜 / 이미지 경로 / 정답 링크 저장하기
*/
}
}
});
public void saveBitmapToJpeg(Bitmap bitmap) {
File tempFile = new File(getActivity().getCacheDir(), imgName);
try {
tempFile.createNewFile();
FileOutputStream out = new FileOutputStream(tempFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}