(/sdcard/tlogo.png)와 같은 파일의 전체 경로가 있다고 가정하십시오. MIME 유형을 알고 싶습니다.
나는 그것을위한 함수를 만들었다
public static String getMimeType(File file, Context context)
{
Uri uri = Uri.fromFile(file);
ContentResolver cR = context.getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
String type = mime.getExtensionFromMimeType(cR.getType(uri));
return type;
}
하지만 내가 전화하면 null을 반환합니다.
File file = new File(filePath);
String fileType=CommonFunctions.getMimeType(file, context);
답변
가장 먼저 다음과 MimeTypeMap#getMimeTypeFromExtension()
같이 호출하는 것을 고려해야 합니다.
// url = file path or whatever suitable URL you want.
public static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;
}
답변
모든 파일의 MIME 유형 감지
public String getMimeType(Uri uri) {
String mimeType = null;
if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
ContentResolver cr = getAppContext().getContentResolver();
mimeType = cr.getType(uri);
} else {
String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri
.toString());
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
fileExtension.toLowerCase());
}
return mimeType;
}
답변
위의 MimeTypeMap 솔루션이 내 사용법에서 null을 반환했습니다. 이것은 작동하며 더 쉽습니다.
Uri uri = Uri.fromFile(file);
ContentResolver cR = context.getContentResolver();
String mime = cR.getType(uri);
답변
null 안전 및 대체 유형 으로 Jens 응답 의 최적화 된 버전 .
@NonNull
static String getMimeType(@NonNull File file) {
String type = null;
final String url = file.toString();
final String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
}
if (type == null) {
type = "image/*"; // fallback type. You might set it to */*
}
return type;
}
중요 : getFileExtensionFromUrl ()은 소문자 에서만 작동합니다 !
업데이트 (19.03.2018)
보너스 : 덜 장황한 Kotlin 확장 기능 으로 위의 방법 :
fun File.getMimeType(fallback: String = "image/*"): String {
return MimeTypeMap.getFileExtensionFromUrl(toString())
?.run { MimeTypeMap.getSingleton().getMimeTypeFromExtension(toLowerCase()) }
?: fallback // You might set it to */*
}
답변
File file = new File(path, name);
MimeTypeMap mime = MimeTypeMap.getSingleton();
int index = file.getName().lastIndexOf('.')+1;
String ext = file.getName().substring(index).toLowerCase();
String type = mime.getMimeTypeFromExtension(ext);
intent.setDataAndType(Uri.fromFile(file), type);
try
{
context.startActivity(intent);
}
catch(ActivityNotFoundException ex)
{
ex.printStackTrace();
}
답변
위 의 umerk44 솔루션에 세심한주의를 기울이 십시오 . CASE SENSITIVE를 getMimeTypeFromExtension
호출합니다 guessMimeTypeTypeFromExtension
. 나는이 다음 면밀한 관찰을했다에 오후를 보냈다 – getMimeTypeFromExtension
반환 NULL
당신이 “JPG”당신이 “JPG”를 전달할 경우는 “이미지 / JPEG”를 반환하는 반면 그것을 전달하는 경우.
답변
내 안드로이드 앱에서 사용한 솔루션은 다음과 같습니다.
public static String getMimeType(String url)
{
String extension = url.substring(url.lastIndexOf("."));
String mimeTypeMap = MimeTypeMap.getFileExtensionFromUrl(extension);
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(mimeTypeMap);
return mimeType;
}