MediaMetadataRetriever 클래스 사용할 때 use() 메소드 호출할 때 앱 터지는 문제 해결
File I/O 함수에 try-catch문 추가
설명
1. 권한 문제
Manifest.permission.WRITE_EXTERNAL_STORAGE가 문제의 원인이었습니다. 코드에서는 28 버전 이하일 땐 해당 권한을 갖고 있는지 검사하고 있는데, manifest 파일에는 선언되어 있지 않아서 유저에게 권한 요청 뜨지 않고 있었습니다. 그래서 항상 권한이 없어서 생기는 문제였고, 지금 이 권한이 사용되지 않고 있어서 일단 주석으로 처리했습니다.
private val REQUIRED_PERMISSIONS =
mutableListOf(
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO
)/*.apply {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
}*/.toTypedArray()
2. MediaMetadataRetriever
MediaMetadataRetriever.use{}로 자동으로 리소스를 반환하게 했는데, 특정 버전 이상부터 AutoClosable 인터페이스가 구현되어 있길래 .use{} 사용하던 부분을 수정했습니다.
public class MediaMetadataRetriever implements AutoCloseable {
// ...
}
Main Changes
설명
1. 권한 문제
Manifest.permission.WRITE_EXTERNAL_STORAGE가 문제의 원인이었습니다. 코드에서는 28 버전 이하일 땐 해당 권한을 갖고 있는지 검사하고 있는데, manifest 파일에는 선언되어 있지 않아서 유저에게 권한 요청 뜨지 않고 있었습니다. 그래서 항상 권한이 없어서 생기는 문제였고, 지금 이 권한이 사용되지 않고 있어서 일단 주석으로 처리했습니다.
2. MediaMetadataRetriever
MediaMetadataRetriever.use{}로 자동으로 리소스를 반환하게 했는데, 특정 버전 이상부터 AutoClosable 인터페이스가 구현되어 있길래 .use{} 사용하던 부분을 수정했습니다.