Доброго времени суток, мы рассмотрели основные моменты и теперь должны понять как вести себя внутри телефона. Для этого нужно знать: списки установленных приложений, мессенджеров, банков и так далее. Друг вокруг Первым делом окинем взором окрестности, напишем простой и незамысловатый код: Код: PackageManager pm = cnt.getPackageManager(); List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); for (ApplicationInfo packageInfo : packages) { try{ //packageInfo.packageName //packageInfo.sourceDir //pm.getLaunchIntentForPackage(packageInfo.packageName) } catch (JSONException e) { } } packageInfo.packageName – это имя пакета packageInfo.sourceDir – путь к корневой папке приложения pm.getLaunchIntentForPackage (packageInfo.packageName) – имя запускаемой Activity, очень важный параметр для инжектов, мы это опишем в дальнейших частях. Этой информации будет достаточно, чтобы понять какие и где стоят приложения. Если рассмотреть класс packageInfo, там будет больше информации, но она не особо интересна. В реальном коде Tryи JSONException использовать не обязательно. Собираем информацию о системе Создаем объект телефонного менеджера. Код: TelephonyManager tm = (TelephonyManager)context.getSystemService(context.TELEPHONY_SERVICE); Код: tm.getDeviceId() Возвращает ID устройства, который можно использовать в отстуке, так как это уникальное значение для каждого аппарата, которое нельзя изменить. Код: tm.getNetworkCountryIso() Получаем страну устройства Код: tm.getSimOperatorName() Получаем сотового оператора. Код: android.os.Build.VERSION.RELEASE Очень важный параметр, вам придется его часто использовать. Почему? Некоторые фишки работают только для 2.х или 4.х телефонов. И нам придется разграничивать из вручную. Может быть так, что системная функция устарела, или изменила число параметров. В этом случае мы прибегаем к SDK и параметру. Пример: Код: if(Build.VERSION.SDK_INT >= 19) { //работаем с версией 4.х }else{ //работаем с версией 2.х } Код: android.os.Build.MODEL Получаем модель устройства, важный параметр, ибо чем сложнее бот, тем больше приходится учитывать специфику разных прошивок. Код: tm.getLine1Number() Параметр иногда возвращает номер телефона, иногда нет. Нужен для идентификации самого абонента. Так же по номеру можно узнавать город и оператора. Код: tm.getSimSerialNumber() Серийный номер сим карты. Будьте бдительны, последние два параметра указаны для телефонов с 1 сим-картой. Для двух, команды похожие, но это нужно контролировать. Админ, ты где? Рассмотрим проверку, есть ли у нас права администратора. Само получение оставим до следующих статей про закрепление. Код: DevicePolicyManager deviceManager = (DevicePolicyManager) context.getSystemService(context.DEVICE_POLICY_SERVICE); ComponentName componentName = new ComponentName(context, CAdm.class); if (!deviceManager.isAdminActive(componentName)) { //нету админа }else{ //есть админ } Приплыли Это минимальный список параметров, которые мы должны обязательно обработать, чтобы правильно принимать решение в среде чужого телефона. Обычно их включают в отстук и они могут измениться. Поэтому проверяй-те их почаще. 6ая часть: