안드로이드에서 제공하는 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);
}
참고
Recommended Posts:
- AIDEGen으로 IDE에서 Android Framework 개발
- Android - adb shell input 명령어 사용 방법
- Android - App VersionCode, VersionName 등 설치 정보 확인
- Android - Call Stack 출력하는 방법
- Android 앱의 SQLite DB 테이블 확인
- Java 코드를 DEX로 변환, 안드로이드 디바이스에서 실행
- Android - adb로 실행 중인 프로세스, 쓰레드 리스트 & 메모리 정보 확인
- Android - PlayStore 앱 설치(다운로드) 화면으로 이동하는 방법
- Mockito cannot mock/spy final class 에러 해결 방법
- Android Studio에서 Google Test로 C++ unit 테스트 작성
- Android - Native(C++)에서 Call stack 출력하는 방법
- Android Emulator에서 adb remount 하는 방법 (Writable)
- 안드로이드 스튜디오, custom framework.jar로 빌드하기