Com google android finsky permission

App Permissions в Android – что это и как его использовать

Com google android finsky permission

Мы все слышали истории о вредоносных приложениях, которые крадут ценные данные и отправляют их злоумышленникам. Специалисты утверждают, что перед установкой каждого приложения необходимо тщательно ознакомиться с его разрешениями. Но что они означают и как их правильно настроить?

Зачем необходим App Permissions на Android и как его удалить.

Что это такое

App Permissions – это и есть разрешения. Когда вы устанавливаете софт из Google Play на устройстве под управлением Android 6.0 или выше, вы контролируете, к каким возможностям или информации может обращаться программа – так называемые разрешения.

Например, утилите может потребоваться разрешение на просмотр контактов или местоположения вашего устройства. Вы можете контролировать, к каким разрешениям ПО сможет получить доступ после установки на устройстве.

И если «Автоматический запуск программы при загрузке» говорит само за себя, то разобраться в остальных может быть не так просто.

Проблема в том, что программы могут иметь веские основания для их использования, потому что одним разрешением может быть охвачено несколько разных вещей. Рассмотрим самые распространённые примеры менеджмента разрешений более подробно.

Совершать и принимать вызовы

Это означает, что ПО может автоматически сделать звонок. Каждая утилита может самостоятельно запускать номеронабиратель и даже вводить номер, но, если это разрешение не предоставлено, пользователю нужно нажать кнопку вызова.

Такие вещи, как сторонний номеронабиратель, Google Voice или всё, что связано с вашей телефонной «звонилкой», должно иметь это разрешение. Если ПО его запрашивает, но не должно иметь ничего общего с совершением звонков, отклоните запрос и выясните причину запроса у разработчиков через отзывы на Google Play.

Даже если причины использования того или иного разрешения вам не понятны, они могут требоваться для стабильной работы программ.

Получение и отправка SMS или MMS

Подписные SMS-сервисы – лёгкий способ для мошенника заработать деньги, так что за ними нужно следить.

Доступ понадобится SMS-приложениям (что очевидно), а также утилитам, которые позволяют редактировать или делать снимки, а также делиться ими.

Программы, которые могут совместно использовать любые медиа, скорее всего будут иметь эту настройку. Если софт не может никому ничего отправлять, следует проверить, зачем это нужно разработчикам.

Чтение/запись контактов

Почтовый клиент или мессенджер любого типа использует это разрешение, чтобы делать именно то, о чём говорит его название – читать ваши контакты. Например, или – они хотят иметь возможность находить ваших друзей, которые также пользуются их услугами, или упростить для вас рассылку спама тем, кто этого не делает.

«Контакты» – это широкий термин, потому что в отдельном контакте может храниться много различной информации. Например, в играх, где также есть списки лидеров. Всё, что может связать вас с другим пользователем, будет нуждаться в этом разрешении. Права на сохранение контактов следует той же логике – если утилита может добавить контакт, ей может потребоваться это разрешение.

В этом случае «записать» означает изменить или добавить в список контактов, а не написать сообщение.

Чтение/запись событий календаря

Здесь всё довольно просто. Настройка позволяет делать только одно – автоматически читать календарь. Некоторые утилиты должны иметь доступ к календарю. Это программы, которые могут напоминать о приёме лекарств или автоматически сообщать о предстоящей поездке, считывая данные из календаря.

Если программа каким-либо образом связана с планированием, то использование такого доступа вполне оправдано. Если это не так, перед установкой выясните, зачем приложению нужен доступ к календарю. Запись событий календаря является обычным делом. Если неясно, зачем программе нужны эти настройки, описание в магазине Play должно рассказать вам больше.

Если вы все ещё не уверены, спросите разработчика.

Phone Status And Identity

Это наиболее распространённое и наименее понятное разрешение из всех. Вы должны понимать, что оно распространяется на две разные вещи, которые не следует путать. Есть много веских причин, чтобы узнать состояние вашего телефона. И игра является отличным примером.

Вы можете заниматься своим делом и играть в игру, когда внезапно зазвонит ваш телефон. Игра должна вернуться на главный экран и позволить уведомлению о входящем звонке появиться сверху остальных окон.

После этого вызов полностью берёт управление телефоном на себя, но игра должна об этом знать/ Это необходимо для того, чтобы продолжить работу в фоновом режиме, пока вы не закончите разговор.

Важно знать, какой идентификатор запрашивает программа. Каждый телефон имеет идентификатор устройства, который отличается от любого другого, и его можно раскрыть, не передавая никакой личной информации.

Когда вы видите, сколько людей используют определённую версию Android на графике от Google, они используют этот идентификатор устройства, чтобы помочь получить эти цифры. Когда вы заходите в Google Play и скачиваете программу, вас подсчитывают, и при этом только один раз.

Идентификатор смартфона также является лучшим способом для синхронизации облачных данных и настроек ПО со смартфоном. Разрешение указывает только на то, какой у вас телефон и какое на нём программное обеспечение, поэтому ваши данные не будут доступны.

Разрешение также позволяет прочитать другой уникальный идентификатор – IMEI. Номер IMEI – это то, как телефонная компания подключает телефон – ваш адрес, ваше имя и всё остальное, что вам нужно будет предоставить, чтобы купить телефон, который сможет доказать, кто вы.

Эти данные трудно получить – между ними и любыми данными вашей учётной записи есть минимум три разных защищённых и зашифрованных сервера базы данных, но получить доступ к ним не невозможно.

Поскольку у вас нет возможности узнать, какой идентификатор требует приложение, выберите «Нет», если не знаете, почему разработчики этого хотят и что они с ним делают.

GPS и сетевое местоположение

Если приложение должно знать, где вы находитесь, оно должно запросить ваше местоположение. Есть два вида местоположения – неточное и точное. Первый вариант подходит для большинства рядовых ситуаций, но иногда требует точное местоположение. Потребность в вашем точном местоположении может быть определена простым запросом.

Например, когда приложение должно знать, что находится в радиусе 50 м. Здесь необходимо точное местоположение. Точное местоположение необходимо и программам, которые, например, показывают, где находятся супермаркеты с оборудованным для инвалидов входом или лифтами.

А вот простые программы для совершения покупок не требуют точного местоположения, в отличие от навигационных карт.

Изменять/Удалять содержимое SD-карты

Это разрешение, которое позволяет приложению читать или записывать данные на внешнюю память смартфона. Необходимо, чтобы дать приложению возможность свободно просматривать данные, изменять их, удалять и добавлять дополнительную информацию данные в любое место на SD-карте.

Сбивает с толку тот факт, что под SD-картой подразумевается не только флешка. В файловой системе Android память телефона также называется SD-картой. Google многое сделал, чтобы сделать это разрешение безвредным.

В каждой версии они уточняют, как приложение может получить доступ только к той информации, которая ему нужна. Но все ещё есть пользователи, использующие старые версии программ и ОС. Если вы один из них, убедитесь, что вы доверяете приложению, прежде чем устанавливать его.

Любое приложение, написанное для API уровня 4 (Android 1.6 Donut) или ниже, получает это разрешение по умолчанию. Таких приложений не так много. Какой вред это может принести, зависит от того, какие данные хранятся в памяти вашего телефона.

Телефоны под управлением Android 7 Nougat и приложения, созданные для телефонов под управлением Android 7, используют доступ к каталогу в заданной области, что гораздо удобнее и безопаснее.

Полный доступ к сети

Это разрешение означает именно то, что оно говорит. Приложение хочет иметь возможность отправлять запросы и получать ответ через сеть (Wi-Fi или подключение для передачи данных по мобильной сети).

Помимо приложений, которые используют Интернет для чего-то очевидного, в них нуждаются в этом приложения с рекламой. Разрешение довольно безвредное, но, когда речь заходит о вашей личной информации, оно может использовать данные без вашего ведома.

Мы ненавидим платить за дополнительные данные так же, как и вы. Если вы найдёте приложение, которое должно работать в автономном режиме, но не работает, удалите его.

Как удалить App Permissions

Чтобы найти свои приложения и их разрешения на Android, откройте «Настройки», а затем нажмите «Приложения и уведомления», «Информация о приложении» и выберите интересующее вас приложение. Выберите пункт «Разрешения», чтобы просмотреть, какими из них обладает приложение.

Вы можете отключить любое из них в любое время, передвинув переключатель рядом с этой записью. Другой вариант – просматривать по разрешению, а не по приложению. Откройте «Настройки» и перейдите в раздел «Приложения и уведомления», как и в предыдущем случае. Но на этот раз выберите «Разрешения приложения».

Откроется список разрешений, который включает датчики, календарь, камеру, контакты, местоположение, микрофон, SMS, память, телефон и многое другое. Нажмите любую запись, чтобы увидеть, какие приложения могут получить доступ к этой функции. Здесь также с помощью переключателей можно убрать любые настройки.

 Прежде чем начинать отключать разрешения, помните, что для выполнения своей работы некоторые приложения полагаются на этот доступ.

Например, если приложение может просматривать ваши контакты, оно использует их, чтобы помочь вам обмениваться контентом, файлами или приглашать друзей на мероприятия, а не собирать ваши данные для получения прибыли.

Разрешения при загрузке софта

Когда вы загружаете программы из Play Store, некоторые из них перед установкой запрашивают разрешение на использование информации. При загрузке приложений, созданных для Android 6.0 и более поздних версий, вы можете предоставить или запретить разрешения непосредственно во время установки. Чтобы просмотреть разрешения той или иной утилиты перед установкой, сделайте следующее:

  1. Откройте приложение Play Store.
  2. Перейти на страницу сведений о приложении. Чтобы просмотреть разрешения перед установкой, пролистайте до раздела «Разработчик» и нажмите «Сведения о разрешениях».
  3. Нажмите «Установить».

Некоторые приложения будут установлены сразу. Вы можете разрешить или запретить отдельные запросы на разрешение до того, как приложение будет использовать данные такого типа. Для других программ в Google Play отображаются все группы разрешений, к которым она сможет получить доступ перед установкой. Эта информация может помочь вам решить, хотите ли вы установить её.

Если приложение уже установлено

Для приложений, созданных для Android 6.0 и выше, просматривать или принимать изменения разрешений при каждом обновлении не нужно. Достаточно указать необходимые права при первом запуске программы.

 Если при обновлении приложению требуется доступ к новым группам разрешений или разрешениям в группе «Другие», вам будет предложено заново подтвердить решение, даже если вы настроили автоматические обновления.

Если вы предпочитаете просматривать каждое обновление вручную, вы можете отключить автоматическое обновление, следуя приведённым ниже инструкциям:

  1. Откройте приложение Play Store.
  2. Нажмите кнопку Меню – Мои приложения и игры – Установленные.
  3. Выберите приложение.
  4. Нажмите Больше (вертикальная линия из 3-х точек).
  5. Снимите флажок «Автообновление», если он ещё не снят.

Чтобы отключить автообновление для всех приложений:

  1. Откройте приложение Play Store.
  2. Нажмите кнопку Меню – Настройки – Автообновление приложений – Никогда не обновлять автоматически.

Есть также много других, менее подозрительных разрешений. Приложение, которое делает снимки, должно контролировать ваше оборудование. Netflix должен держать ваш экран активным в течение всего времени, пока вы его не касаетесь. Виджет профиля звонков нуждается в доступе к вашим настройкам.

Разобраться с разрешением, которое кажется неуместным, обычно помогает немного логики. Если нет, то читайте комментарии в Google Play и задавайте вопросы на форумах. Большинство приложений в Google Play не могут украсть ваши данные или ваши деньги.

 Помните, что большинство людей, пишущих приложения, просто хотят заработать немного денег или делают это ради удовольствия. Приложений, которые существуют для обработки ваших данных, не так много.

Но иногда разработчики допускают ошибку – нетрудно заставить Android запрашивать разрешение, которое не используется приложением, и легко игнорировать эти ошибки при их создании.

Источник: https://nastroyvse.ru/opersys/android/chto-takoe-app-permissions-na-android.html

Android permissions

Com google android finsky permission

Подробности 08 ноября 2017

Операционная система Android устроена таким образом, что для выполнения некоторых операций или доступа к определенным ресурсам, приложение должно иметь разрешение на это.

Разрешения могут быть двух типов: normal и dangerous. Отличие между ними в том, что dangerous разрешения опасны, т.к. могут быть использованы для получения ваших личных данных или информации о вас, или еще каким-то способом могут навредить вам. Примеры dangerous разрешений – это доступ к контактам или смс.

Полный список существующих разрешений можно посмотреть здесь. Характеристика Protection level подскажет насколько опасно это разрешение. А здесь можно сразу просмотреть весь список normal разрешений.

Если приложению необходимо получить какое-либо разрешение, то оно должно быть указано в AndroidManifest.xml, в корневом теге . Тег разрешения – .

Вот пример манифеста с разрешениями:

Здесь мы указываем, что приложению понадобятся разрешения на работу с интернет, контактами, bluetooth, локацией, камерой и смс. Пользователю необходимо будет подтвердить, что он предоставляет приложению эти разрешения.

В этом материале мы подробно рассмотрим, как происходит это подтверждение.

До Android 6

До выхода Android 6 все было просто и легко. Когда пользователь устанавливал приложение с манифестом, который мы рассмотрели чуть выше, то он видел такой экран:

Система показывает разрешения, которые были прописаны в манифесте. Сначала те, которые могут быть опасными с точки зрения приватности (отправка смс, доступ к камере/местоположению/контактам), а затем – обычные (интернет, bluetooth).

Таким образом пользователь видит, на что претендует приложение, и может примерно понять все ли в порядке. Если, например, приложение калькулятор при установке просит у вас доступ к контактам и смс, то скорее всего, что-то не так с этим приложением и оно может быть опасным для ваших данных.

Нажав кнопку Install, пользователь автоматически подтверждает свое согласие, что приложению будут предоставлены эти запрашиваемые разрешения. И далее, когда приложение, например, пытается в коде получить список контактов, то оно без проблем их получает.

Если же в манифесте не указать разрешение READ_CONTACTS, то его не будет и в списке тех разрешений, которые подтверждает пользователь. Соответственно, система не предоставит этому приложению доступ к контактам. И при попытке получить список контактов, будет ошибка:
java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2

Android 6

С выходом Android 6 механизм подтверждения поменялся. Теперь при установке приложения пользователь больше не видит списка запрашиваемых разрешений. Приложение автоматически получает все требуемые normal разрешения, а dangerous разрешения необходимо будет программно запрашивать в процессе работы приложения.

Т.е. теперь недостаточно просто указать в манифесте, что вам нужен, например, доступ к контактам. Когда вы в коде попытаетесь запросить список контактов, то получите ошибку SecurityException: Permission Denial. Потому что вы явно не запрашивали это разрешение, и пользователь его не подтверждал.

Перед выполнением операции, требующей разрешения, необходимо спросить у системы, есть ли у приложения разрешение на это. Т.е. подтверждал ли пользователь, что он дает приложению это разрешение. Если разрешение уже есть, то выполняем операцию. Если нет, то запрашиваем это разрешение у пользователя.

Давайте посмотрим, как это выглядит на практике.

Проверка текущего статуса разрешения выполняется методом checkSelfPermission

int permissionStatus = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS); На вход метод требует Context и название разрешения. Он вернет константу PackageManager.PERMISSION_GRANTED (если разрешение есть) или PackageManager.PERMISSION_DENIED (если разрешения нет).

Если разрешение есть, значит мы ранее его уже запрашивали, и пользователь подтвердил его. Можем получать список контактов, система даст нам доступ.

Если разрешения нет, то нам надо его запросить. Это выполняется методом requestPermissions. Схема его работы похожа на метод startActivityForResult. Мы вызываем метод, передаем ему данные и request code, а ответ потом получаем в определенном onResult методе.

Добавим запрос разрешения к уже имеющейся проверке.

int permissionStatus = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS); if (permissionStatus == PackageManager.PERMISSION_GRANTED) { readContacts(); } else { ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_CONTACTS}, REQUEST_CODE_PERMISSION_READ_CONTACTS); }

Проверяем разрешение READ_CONTACTS. Если оно есть, то читаем контакты. Иначе запрашиваем разрешение READ_CONTACTS методом requestPermissions. На вход метод требует Activity, список требуемых разрешений, и request code. Обратите внимание, что для разрешений используется массив. Т.е. вы можете запросить сразу несколько разрешений.

После вызова метода requestPermissions система покажет следующий диалог

Здесь будет отображено разрешение, которое мы запросили методом requestPermissions. Пользователь может либо подтвердить его (ALLOW), либо отказать (DENY). Если будет запрошено сразу несколько разрешений, то на каждое из них будет показан отдельный диалог. И пользователь может какие-то разрешения подтвердить, а какие-то нет.

Решение пользователя мы получим в методе onRequestPermissionsResult

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CODE_PERMISSION_READ_CONTACTS: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission granted readContacts(); } else { // permission denied } return; } }

Проверяем, что requestСode тот же, что мы указывали в requestPermissions. В массиве permissions придут название разрешений, которые мы запрашивали. В массиве grantResults придут ответы пользователя на запросы разрешений.

Мы проверяем, что массив ответов не пустой и берем первый результат из него (т.к. мы запрашивали всего одно разрешение). Если пользователь подтвердил разрешение, то выполняем операцию. Если же пользователь отказал, то дальнейшие действия зависят от логики вашего приложения.

В итоге схема получения разрешения состоит из трех действий:- проверка текущего состояния разрешения – запрос на получение разрешения, если оно еще не было получено

– обработка ответа на запрос

Далее поговорим про некоторые дополнительные возможности, нюансы и прочие мелочи.

Манифест

При использовании новой схемы разрешений вам все равно необходимо указывать разрешение в манифесте. Если его там не указать и сделать запрос на это разрешение, то вам просто сразу придет отказ без всякого диалога.

Всегда проверяйте разрешение

Каждый раз (а не только первый) перед выполнением операции, требующей определенного разрешения, необходимо проверять, что это разрешение есть. Потому что, даже если пользователь уже давал это разрешение, он всегда может зайти в настройки приложения и отменить его. И если вы после этого не выполните проверку, то получите ошибку при выполнении операции.

Don’t ask again

Когда вы первый раз делаете запрос на какое-либо разрешение, пользователь может отказать. При последующих запросах этого же разрешения, в диалоге появится чекбокс Don’t ask again

Если пользователь включит этот чекбокс, то при последующих ваших запросах диалог не будет отображаться, а в onRequestPermissionsResult сразу будет приходить отказ.

Объяснение для пользователя

Когда вы запрашиваете разрешение, пользователю должно быть очевидно, зачем приложению понадобилось это разрешение, и у него не должно возникать вопросов. Но случаи бывают разные, и вы можете решить, что вам надо явно объяснить пользователю, почему приложению понадобилось это разрешение.

Диалог, который показывается при запросе разрешения, – системный, вы не можете менять его содержимое и добавлять туда свой текст. Но вы можете сделать свой диалог или что-то подобное и показать его перед тем, как будете делать запрос разрешения.

Есть метод shouldShowRequestPermissionRationale, который может быть полезен в данной ситуации. Передаете ему название разрешения, а он вам в виде boolean ответит, надо ли показывать объяснение для пользователя.

Т.е. вы сначала проверяете наличие разрешения. Если его нет, то вызываете shouldShowRequestPermissionRationale, чтобы решить, надо ли показывать объяснение пользователю. Если не надо, то делаете запрос разрешения. А если надо, то показываете ваш диалог с объяснением, а после этого диалога делаете запрос разрешения.

Алгоритм работы метода shouldShowRequestPermissionRationale прост.

Если вы еще ни разу не запрашивали это разрешение, то он вернет false. Т.е. перед первым запросом разрешения ничего объяснять не надо.

Если вы ранее уже запрашивали это разрешение и пользователь отказал, то метод вернет true. Т.е. пользователь не понимает, почему он должен давать это разрешение, и надо ему это объяснить.

Если пользователь ставил галку Don’t ask again, то метод вернет false. Запрос полномочий все равно не будет выполнен. Объяснять что-то не имеет смысла.

Разумеется, вы можете показывать дополнительную информацию согласно вашим правилам и не использовать метод shouldShowRequestPermissionRationale.

Группы

Dangerous разрешения собраны в группы. Список групп можно посмотреть здесь. Если вы запросили одно разрешение из группы и пользователь предоставил вам его, то вы автоматически получаете все разрешения этой группы.

Например, разрешения READ_CONTACTS и WRITE_CONTACTS принадлежат группе CONTACTS. И если пользователь уже подтверждал разрешение на READ_CONTACTS, то при проверке WRITE_CONTACTS вы получите PERMISSION_GRANTED.

Android 6 и targetSdkVersion 23

Схема работы разрешений зависит от версии Android, на которой запущено приложение и от параметра targetSdkVersion приложения.

Новая схема будет работать, если версия Android >= 6 И targetSdkVersion >= 23.

В остальных случаях, т.е. когда targetSdkVersion < 23 ИЛИ версия Android < 6, разрешения будут работать по старому. Т.е. пользователь будет подтверждать их сразу все при установке. Если в приложении есть код, который проверяет разрешения, то он будет получать PERMISSION_GRANTED.

Но учитывайте, что в Android версии 6 и выше, пользователь может отменить разрешения в настройках приложения.

Intent

Не забывайте, что иногда для работы с контактами, камерой и т.п., вы можете использовать Intent и уже установленные приложения. В этом случае вам не придется писать лишний код и запрашивать разрешения для работы с этими ресурсами.

Присоединяйтесь к нам в Telegram:

– в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

– в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование 

– ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

– новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме 

Источник: https://startandroid.ru/ru/blog/508-android-permissions.html

Разрешения Android 6.0 в защите и нападении

Com google android finsky permission

Каждый день в мобильных устройствах выявляют уязвимости, которые могут быть проэксплуатированы злоумышленниками. Они могут отправить СМС на платный номер, могут собрать большую базу данных контактов и продать ее, а могут и скомпрометировать конкретного человека.

Удачная эксплуатация уязвимости обычно предполагает соблюдение целого ряда условий. Но ведь можно пойти и другим путем! Дать пользователю вполне нужное приложение (игрушку с птичками), у которого в манифесте будет записан список интересной нам информации на устройстве.

В данной статье мы рассмотрим способы получения и сохранения важной информации с Android-устройства.

Архитектура ОС Android построена таким образом, что позволяет обмениваться разного рода информацией между приложениями. Приложению, работающему с картами, нужно местоположение, диктофону — доступ к микрофону. Таким образом, с виду все ясно и прозрачно.

Мы открыто прописываем в манифесте приложения требуемые данные или возможности и получаем их при установке. Никто никого не обманывает, все добровольно.

Но проблема состоит в том, что пользователи ужасно неграмотны в информационных технологиях. Мало кто задумывается, для чего тому же диктофону требуется твое местоположение или доступ к СМС.

Приложение открыто заявляет о своих намерениях в манифесте, и странно было бы ожидать от него другого поведения.

Задолго до всем известного разоблачения я понимал, что игрушка со злыми птичками на твоем устройстве — это стукач, так как оно, помимо всего прочего, хочет читать идентификатор устройства и данные о вызовах. Простой вопрос «Тебе эти данные зачем?» обнажает истинные намерения ее создателей.

Пользователь при установке приложения ставится в положение «или разрешай все, что оно хочет, или останешься без программы».

Только единицы пойдут в магазине искать приложение со сходной функциональностью, но с меньшими запросами (аналогов может вовсе не быть), поэтому у пользователей быстро входит в привычку жать «да-да-да» на все вопросы.

Согласись, легко привыкать, когда за долгие годы офлайн-жизни у пользователей вырабатывался рефлекс автоматически подписывать многостраничные договоры, по принципу «ну, все же подписывают, наверное, тут ничего плохого, да и выход всего один — либо я подписываю тут, либо не получаю того, за чем пришел».

После установки шпионское приложение не надо даже запускать, так как в нем может быть прописан механизм приема широковещательных сообщений (BroadcastReceiver) , который при получении сообщения от системы запустит сервис сбора информации.

Если мы отберем все разрешения у приложения, ОС во избежание падения программы может просто отдать ему пустые значения. Можно обмануть приложение, подсунув ему заведомо ложные данные (местоположение Северного полюса) или просто нули.

Например, приложение может спросить список контактов на устройстве, и разработчик предполагает в своей архитектуре, что он может быть пустым (совсем новое устройство).

Тут даже и заподозрить нечего — и данные спасены, и приложение не сломалось.

На такие ухищрения приходилось идти вплоть до версии Android 6.0 Marshmallow. В ней появился новый механизм работы с разрешениями.

Он позволяет давать и забирать разрешения во время работы самого приложения.

Для обратной совместимости старых аппликух (то есть у которых значение targetSdkVersion меньше 23) работает старый механизм запроса разрешений при установке.

Обновленные приложения должны запрашивать разрешения в процессе работы. В настройках приложения мы можем посмотреть, к чему у приложения есть доступ, и при желании отозвать этот самый акцесс.

Рассмотрим работу данного механизма на устройстве с версией Android 6.0.

Давай установим птичек, но перед первым запуском отберем у них все права. При запросе прав при установке из гуглплея мы видим, что targetSdkVersion у приложения меньше 23. Экран настроек говорит нам о несколько завышенных интересах создателей приложения.

Как насчет того, чтобы немного их укоротить?

Забираем разрешенияВот так-то будет лучше

После отзыва разрешений я запустил игру, и оказалось, что нормальной работе это ничуть не помешало. Видимо, фоновый сервис сбора данных никак не влияет на основной игровой интерфейс.

Теперь давай рассмотрим работу с обновленным приложением Skype. Вот перед нами часть манифеста «похожего» приложения. Список разрешений и требований из манифеста приложения вдохновляет:

Если бы только пользователи это видели…

Раз мы хотим сохранить хотя бы малую долю частной жизни, остается уповать только на операционную систему. Рассмотрим процесс установки приложения. При установке из маркета никаких диалоговых окон не показывается — все разрешения приложение будет спрашивать потом. Проверим в настройках.

У скайпа разрешений нетУ скайпа разрешений совсем нет

Запустим приложение. Последовательно идут семь запросов.

Запрос скайпа 1

Последовательно отклоняем все запросы, и скайп превращается в интернет-чат :).

Постой, я сказал «в интернет-чат»? А почему он не спросил разрешения на доступ в интернет? А все потому, что разрешения делятся на две группы: обычные и опасные. Доступ теперь должны запрашивать только последние.

Список обычных разрешений можно посмотреть тут. А вот — опасные разрешения (и их группы).

Для создания запросов на разрешения есть подробные материалы: шаблоны использования запросов на доступ к разрешениям, рекомендации для доступа к разрешениям, а вот и полный список разрешений.

С теорией мы более-менее разобрались, теперь перейдем к практике.

Обогащенные этим новым знанием, давай напишем небольшое приложение, в котором будем читать данные о контактах пользователя через запросы в интерфейсе и в сервисе. Как недавно выяснилось, некоторые приложения очень часто любят читать эти данные (оно и неудивительно — вдруг там что-то изменилось, а создатели «хороших» приложений и не знают).

Исходный код проекта доступен по ссылке.

Нажатием на кнопку мы проверяем версию ОС и, если она 23 и выше, делаем запрос на получение прав:

public void setRequestReadContacts(View view) { // Проверка на уже данные разрешения if (hasSelfPermission(this, Manifest.permission.READ_CONTACTS)) { // Разрешение есть, показываем контакты showContacts(); } else { // Разрешения нет, посылаем запрос if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_READ_CONTACTS); } } }Диалог на запрос прав

После диалога в методе onRequestPermissionsResult нужно обработать ответ:

@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == REQUEST_READ_CONTACTS) { if (verifyAllPermissions(grantResults)) { // Разрешение получено, показываем контакты showContacts(); } else { Toast.makeText(this, “Разрешение REQUEST_READ_CONTACTS не было получено”, Toast.LENGTH_SHORT).show(); } } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }

Читаем контакты в одну строчку с переходами на новую строку:

private String readContacts() { Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); String names = “”; while (phones.moveToNext()) { names = names + phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)) + “”; } phones.close(); return names; }

Показываем контакты в окне, при клике по окну оно скроется:

public void createWindow(String contacts) { LayoutInflater layoutInflater = (LayoutInflater) getBaseContext() .getSystemService(LAYOUT_INFLATER_SERVICE); View popupView = layoutInflater.inflate(R.layout.popup_window, null); if (mPopupWindow != null) mPopupWindow.dismiss(); mPopupWindow = new PopupWindow( popupView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog); LinearLayout ll = (LinearLayout) popupView.findViewById(R.id.PopUp); TextView tv_message = (TextView) popupView.findViewById(R.id.tv_message); tv_message.setText(contacts); ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPopupWindow.dismiss(); } }); mPopupWindow.showAtLocation(mMainLayout, Gravity.CENTER, 0, (int) (mSidePopup * 0.3)); }

А вот результат работы чтения контактов:

Забыл взять контакты у совы

Теперь проделаем то же самое, но в сервисе, как и положено плохому приложению. Сервис никаких запросов слать не будет, а будет пытаться просто в лоб читать контакты.

Запуск сервиса сделаем по событию подключения к Wi-Fi .
Код сервиса:

public class ReadContactsService extends Service { public ReadContactsService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException(“Not yet implemented”); } private String readContacts() { Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); String names = “”; while (phones.moveToNext()) { names = names + phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)) + “”; } phones.close(); return names; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(getBaseContext(), readContacts(), Toast.LENGTH_SHORT).show(); return START_STICKY; } }

Код приемника:

public class WifiReceiver extends BroadcastReceiver { public WifiReceiver() { } @Override public void onReceive(Context context, Intent intent) { NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if (info != null && info.isConnected()) { // Делаем свою работу Toast.makeText(context, “Подключен”, Toast.LENGTH_LONG).show(); Intent myIntent=new Intent(context,ReadContactsService.class); context.startService(myIntent); } } }

Если у приложения есть права, то сервис покажет Toast сообщение со списком контактов, если прав нет — вызовет ошибку с сообщением. Теперь исследуем поведение приложения, если выставить ему targetSdkVersion ниже 23.

По умолчанию приложению были выданы права, и все работает штатно без запросов. После отключения прав в настройках приложения список контактов стал приходить пустым. Никаких ошибок мы не получили, но и контактов тоже. Значит, без нашего ведома приложения будут получать неактуальную информацию.

Новая версия Android включает в себя более надежные и гибкие настройки прав для приложений. Можно сказать, что в новой версии наши данные защищены более эффективно, но это не значит, что теперь тебе можно вслепую соглашаться со всеми предложениями, поступающими из всплывающих окошек. Будь бдителен!

Источник: https://xakep.ru/2016/01/26/android-permissions-2/

Оптимизация Miui / отключение не нужных служб

Com google android finsky permission
Оптимизация Miui / отключение не нужных служб

Делаем первоначальные настройки телефона

Отключаем виброотклик и лишние звуки в настройках (Звук и вибрация)

Рабочий стол и Недавние — отключаем “Лента виджетов” (отдельный экран с не очень полезными виджетами от Xiaomi. Ситуацию могла бы изменить возможность использования любых виджетов, установленных в системе.

В разделе Блокировка и защита

Добавляем графический (цифровой ключ), отпечатки и данные о лице (для автоматической разблокировки по лицу)

Расширенные настройки — На заблокированном экране — Скрывать содержимое уведомлений, включаем режим “В кармане”

Play Маркет — Настройки — Автообновление приложений — Никогда (Теперь ни одно установленное приложение не станет самостоятельно обновляться)

Расширенные настройки — Доступ к личным данным (отключаем все ненужные приложения)

Увидомление

Сразу отключаем (ограничиваем) уведомления от надоедливых приложений

Для некоторых программ можно отключить только отображение счетчика уведомлений на иконке приложения, т.е. в шторке уведомления появляться будут, но на иконке никаких циферок мы не увидим. Это может быть актуально для абсолютно любых приложений, которые часто напоминают об обновлениях, регулярных акциях и прочей несущественной информации.

И, наоборот, включаем всплывающие уведомления с разворачиванием на весь экран от приложений, которыми активно пользуетесь, в моем случае это Microsoft Outlook и мессенджеры Whatsapp и Viber.

Кстати, в Whatsapp есть свои настройки всплывающих уведомлений, которые позволяют включать экран смартфона даже, если он выключен, — это удобно, когда смартфон большую часть времени находится неподалеку, например, на какой-нибудь подставке или беспроводной зарядке на столе.

Отключение рекламы без Root прав

Системное приложение msa — главный распространитель рекламы в прошивке MIUI, необходимо по максимуму запретить его использование:

Расширенные настройки — > Доступ к личным данным -> Убираем доступ у msa, MiuiDaemon, Обновление компонентов. В идеале еще надо отобрать права у приложения Безопасность, но такой возможности разработчик не предоставляет.

Безопасность -> Передача данных -> Сетевые подключения -> Системные приложения (в конце списка) -> Ищем и отключаем приложение msa

Безопасность -> Передача данных -> Сетевые подключения -> (три точки в правом верхнем углу) -> Фоновые подключения -> Ищем и отключаем приложение msa

Безопасность -> Приложения -> Находим приложение msa и очищаем все его данные

Этап первый: отключаем приложения без применения ROOT-прав

Для аппаратов Xiaomi используем известную многим программу Redmi System manager, загруженную из Play Маркет, после установки будет называться System App Remover.

Также можете использовать link2sd (я лично использую его)

Отключаем следующие приложения:

Загрузки (без этого компонента файлы прекрасно скачиваются)

Календарь (Calendar) — вместо этого будем использовать родное приложение от Google

Карты (Google Maps) — замораживаем, привычнее пользоваться Яндекс картами

Погода — не думаю, что забугорное приложение будет давать более точные прогнозы, чем Яндекс погода.

Chrome — хороший браузер, но для телефона нужно приложение попроще, то, которое не будет кэшировать все подряд и не будет засорять телефон.

Ещё смутил тот факт, что приложение сделали системным, т.е. его нельзя удалить или полность выгрузить из фоновой работе штатными средствами. И это смущает. Установите что-то попроще, например, Яндекс.

Браузер Лайт, Opera Mini или какой-нибудь DU Browser Mini.

com.mfashiongallery.emag — это карусель обоев от Xiaomi, для смены изображений на экране блокировки. По мне так можно удалить это приложение или оставить, если Вы любитель украшательств.

Duo — аналог Skype, только от компании Google, не вижу смысла пользоваться приложением, особенно, если уже зарегистрированы в Viber или Whatsapp

App Manager — как ни странно прекрасно живёт в нашем телефоне даже после того как мы удалили приложение

Gmail — не вижу смысла оставлять это приложение, так как оно постоянно работает в фоне, хоть и немного, но будет расходовать ресурсы и трафик. Отключаем, так как всегда можно зайти на Gmail.com в любом браузере.

Google Play Музыка — пользовался пробной подпиской, не понравилось, сделал выбор в пользу Яндекс музыки, да ещё и нашел на просторах Интернета ломаную версию 2.99 с неограниченной подпиской

Google Play Фильмы — не пользуюсь этим сервисом

MRGSVendorApp – com.my.games.vendorapp — удаляем, так как предпочитаю загружать игры исключительно через Play Маркет

Ну вот мы и дошли до конца списка, теперь пора нажать на кнопку “Ещё” и “Показать системные процессы”, снова смотрим что можно отключить с начала списка:

Отзывы о маркете — отключать только в том случае, если не пишите отзывы

Память календаря — отключаем, зачем календарю память, если само приложение Календарь мы уже отключили? Используем только оригинальные приложения от Google!

Служба погоды — отключаем в догонку за уже отключённом приложением Погода

Справочник — приложение с полным доступом к Контактам, телефону и СМС, однозначно отключаем, особенно, если учесть, что приложение Контакты и телефон от Xiaomi мы уже отключили.

Bookmark Provider — какой-то сервис закладок от Google, возможно имеет отношение к Play Маркет, ни разу не пользовался

Call Log Backup/Restore — не стоит доверять всем подряд историю своих звонков, доверим это только одному приложению Truecaller.

Источник: https://zen.yandex.ru/media/id/5b02e49177d0e6dd519ad1fe/optimizaciia-miui--otkliuchenie-ne-nujnyh-slujb-5da954aba3f6e4031d82066a

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.