Провел некоторое исследование разрешений Android и наткнулся на приложение, которое - согласно файлу AndroidManifest.xml - объявляет только WRITE_EXTERNAL_STORAGE
как разрешение.Android Market также сообщает об этом.Используя инструмент aapt для вывода разрешения использования, он также сообщает только об одном разрешении.
Однако в коде, работающем на устройстве Android (или в эмуляторе), выполните следующие действия:
PackageManager pm = getPackageManager();
List<PackageInfo> pkgList = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_SIGNATURES);
...
PackageInfo p = pkgList.get(i); // where i is the index of the apk in question
String[] perms = p.requestedPermissions;
Я получаю 2 разрешения для этого APK, READ_PHONE_STATE
и одно в манифесте, WRITE_EXTERNAL_STORAGE
.Просмотр экрана «Управление приложениями» и выбор сведений для этого также показывает дополнительное разрешение READ_PHONE_STATE
.
Существуют ли случаи, когда разрешения могут быть «подразумеваемыми» (в коде при использовании функции ) и т. Д.) Что не потребуется в манифесте Android?Или, другими словами, почему aapt
возвращает один набор разрешений, а getPackageManager().getPackageInfo()
API возвращает другой набор?
РЕДАКТИРОВАТЬ:
Поиск с "более лучшими" терминами нашел ответ, который я искал: Разрешения Android: телефонные звонки: чтение состояния телефона и личности
Короче говоря, APK, скомпилированные с более ранней версией SDK, унаследовали некоторые разрешения бесплатно ...