안드로이드에서 제공하는 MimeTypeMap
을 이용하면 파일 확장자(file extension)로부터 Mime type을 쉽게 가져올 수 있습니다.
Intent는 Mime type 정보를 갖고 있고, 이 인텐트를 실행할 때 이 파일을 처리할 수 있는 앱을 찾을 때 Mime type이 사용됩니다.
인텐트와 mimetype에 대해서 좀 더 알고 싶다면 안드로이드의 명시적(Explicit), 암시적(Implicit) 인텐트 완벽히 이해하기!를 참고해주세요.
MimeTypeMap은 다음과 같은 api를 제공합니다.
- getMimeTypeFromExtension
- getExtensionFromMimeType
- getFileExtensionFromUrl
File extension으로 Mime type 가져오기
MimeTypeMap은 Singleton으로 구현되어있어서 객체를 생성할 때는 getSingleton()
을 사용합니다.
import android.webkit.MimeTypeMap
val mimeTypeMap = MimeTypeMap.getSingleton()
getMimeTypeFromExtension()
에 인자로 extension을 넘겨주면, 그 extension에 해당하는 Mime type을 리턴합니다.
val mimeTypeMap = MimeTypeMap.getSingleton()
val extensions = listOf("gif", "pdf", "png", "mp3", "avi")
for (extension in extensions) {
val mimeType = mimeTypeMap.getMimeTypeFromExtension(extension)
Log.d(TAG, "extension: $extension, mimeType: $mimeType")
}
결과
04-12 13:55:36.833 7523 7556 D Test : extension: gif, mimeType: image/gif
04-12 13:55:36.833 7523 7556 D Test : extension: pdf, mimeType: application/pdf
04-12 13:55:36.833 7523 7556 D Test : extension: png, mimeType: image/png
04-12 13:55:36.833 7523 7556 D Test : extension: mp3, mimeType: audio/mpeg
04-12 13:55:36.833 7523 7556 D Test : extension: avi, mimeType: video/avi
Java는 다음과 같이 구현할 수 있습니다.
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
List<String> extensions = Arrays.asList("gif", "pdf", "png", "mp3", "avi");
for (String extension : extensions) {
String mimeType = mimeTypeMap.getMimeTypeFromExtension(extension);
Log.d(TAG, "extension: " + extension + ", mimeType: " + mimeType);
}
URL로 Mime type 가져오기
이미지, 동영상 파일의 URL으로 Mime type을 가져올 수 있습니다.
getFileExtensionFromUrl()
의 인자에 URL을 넘겨주면 그 URL의 파일에 해당하는 Mime type을 리턴합니다.
val imageUrl =
"https://codechacha.com/static/0bb542e37e34c07735c5e68375497bde/f948d/9keys0.png"
val mimeTypeMap = MimeTypeMap.getSingleton()
val extension = MimeTypeMap.getFileExtensionFromUrl(imageUrl)
val mimeType = mimeTypeMap.getMimeTypeFromExtension(extension)
Log.d(TAG, "extension: $extension, mimeType: $mimeType")
결과
04-12 14:00:39.218 7840 7873 D Test : extension: png, mimeType: image/png
Java는 다음과 같이 구현할 수 있습니다.
String imageUrl = "https://codechacha.com/static/0bb542e37e34c07735c5e68375497bde/f948d/9keys0.png";
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String extension = mimeTypeMap.getFileExtensionFromUrl(imageUrl);
String mimeType = mimeTypeMap.getMimeTypeFromExtension(extension);
Log.d(TAG, "extension: " + extension + ", mimeType: " + mimeType);
Mime type으로 extension(확장자) 가져오기
반대로 Mime type으로 extension을 구할 수도 있습니다.
getExtensionFromMimeType()
의 인자로 Mime type을 전달하면 extension이 리턴됩니다.
val mimeTypeMap = MimeTypeMap.getSingleton()
val mimeTypes = listOf("application/pdf", "image/png",
"audio/mpeg", "video/avi", "image/gif")
for (mimeType in mimeTypes) {
val extension = mimeTypeMap.getExtensionFromMimeType(mimeType)
Log.d(TAG, "mimeType: $mimeType, extension: $extension")
}
결과
04-12 13:57:41.627 7721 7769 D Test : mimeType: application/pdf, extension: pdf
04-12 13:57:41.627 7721 7769 D Test : mimeType: image/png, extension: png
04-12 13:57:41.627 7721 7769 D Test : mimeType: audio/mpeg, extension: mp3
04-12 13:57:41.627 7721 7769 D Test : mimeType: video/avi, extension: avi
04-12 13:57:41.627 7721 7769 D Test : mimeType: image/gif, extension: gif
Java는 다음과 같이 구현할 수 있습니다.
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
List<String> mimeTypes = Arrays.asList("application/pdf", "image/png",
"audio/mpeg", "video/avi", "image/gif");
for (String mimeType : mimeTypes) {
String extension = mimeTypeMap.getExtensionFromMimeType(mimeType);
Log.d(TAG, "mimeType: " + mimeType + ", extension: " + extension);
}
참고
Loading script...
Related Posts
- Android 14 - 사진/동영상 파일, 일부 접근 권한 소개
- Android - adb push, pull로 파일 복사, 다운로드
- Android 14 - 암시적 인텐트 변경사항 및 문제 해결
- Jetpack Compose - Row와 Column
- Android 13, AOSP 오픈소스 다운로드 및 빌드
- Android 13 - 세분화된 미디어 파일 권한
- Android 13에서 Notification 권한 요청, 알림 띄우기
- Android 13에서 'Access blocked: ComponentInfo' 에러 해결
- 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8.
- 안드로이드 - 코루틴과 Retrofit으로 비동기 통신 예제
- 안드로이드 - 코루틴으로 URL 이미지 불러오기
- Android - 진동, Vibrator, VibrationEffect 예제
- Some problems were found with the configuration of task 에러 수정
- Query method parameters should either be a type that can be converted into a database column or a List
- 우분투에서 Android 12 오픈소스 다운로드 및 빌드
- Android - ViewModel을 생성하는 방법
- Android - Transformations.map(), switchMap() 차이점
- Android - Transformations.distinctUntilChanged() 소개
- Android - TabLayout 구현 방법 (+ ViewPager2)
- Android - 휴대폰 전화번호 가져오는 방법
- Android 12 - Splash Screens 알아보기
- Android 12 - Incremental Install (Play as you Download) 소개
- Android - adb 명령어로 bugreport 로그 파일 추출
- Android - adb 명령어로 App 데이터 삭제
- Android - adb 명령어로 앱 비활성화, 활성화
- Android - adb 명령어로 특정 패키지의 PID 찾기
- Android - adb 명령어로 퍼미션 Grant 또는 Revoke
- Android - adb 명령어로 apk 설치, 삭제
- Android - adb 명령어로 특정 패키지의 프로세스 종료
- Android - adb 명령어로 screen capture 저장
- Android - adb 명령어로 System 앱 삭제, 설치
- Android - adb 명령어로 settings value 확인, 변경
- Android 12 - IntentFilter의 exported 명시적 선언
- Android - adb 명령어로 공장초기화(Factory reset)
- Android - adb logcat 명령어로 로그 출력