Android: возможно ли проверить, является ли файл apk, если расширение не указано?
Я пишу приложение, которое будет загружать файл на другое устройство. Я должен ограничить, как тип файла, чтобы поделиться с другим устройством. Я могу проверить расширение файла, но есть ли более безопасный способ проверить, является ли файл apk или нет.
3 ответа
Да, ты можешь. Android-apk файл представляет собой zip-архив.
Таким образом, вы можете проверить, является ли файл zip-файлом, и подтвердить, что classes.dex
а также AndroidManifest.xml
файлы существуют.
Учитывая идею Passer by, вот метод, который проверяет, является ли файл допустимым APK
public static boolean isAPK(File file) {
FileInputStream fis = null;
ZipInputStream zipIs = null;
ZipEntry zEntry = null;
String dexFile = "classes.dex";
String manifestFile = "AndroidManifest.xml";
boolean hasDex = false;
boolean hasManifest = false;
try {
fis = new FileInputStream(file);
zipIs = new ZipInputStream(new BufferedInputStream(fis));
while ((zEntry = zipIs.getNextEntry()) != null) {
if (zEntry.getName().equalsIgnoreCase(dexFile)) {
hasDex = true;
} else if (zEntry.getName().equalsIgnoreCase(manifestFile)) {
hasManifest = true;
}
if (hasDex && hasManifest) {
zipIs.close();
fis.close();
return true;
}
}
zipIs.close();
fis.close();
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
return false;
}
return false;
}
Можно сделать этот класс:
new MimeTypeMap()
Согласно документации Android должен дать правильный результат:
Two-way map that maps MIME-types to file extensions and vice versa.