Android 6.0 обратная совместимость

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

Как я понял, например, если я хочу предоставить доступ для записи SDCard (Eternal Storage), что является опасным разрешением, я должен попросить пользователя предоставить доступ, а затем обработать решение пользователя (предоставить / отказать), в противном случае всегда мой запрос будет получен отвергается всегда.

Я не знаю, прав я или нет, но я хочу знать, это как-то против обратной совместимости? Я имею в виду, что каждое приложение, которое было запущено в более старых версиях, должно быть изменено для запуска в версии 6.0? Если специальное приложение больше не поддерживается, то Android 6.0, где мы должны попрощаться с ним?

И в этой новой атмосфере мне нужно изменить свои старые приложения, чтобы они работали в Marshmallow (если им нужны опасные разрешения)?

2 ответа

Решение

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

  • Если устройство работает под управлением Android 5.1 или ниже, или целевой SDK вашего приложения равен 22 или ниже: если вы указываете опасное разрешение в манифесте, пользователь должен предоставить разрешение при установке приложения; если они не дают разрешения, система вообще не устанавливает приложение.
  • Если устройство работает под управлением Android 6.0 или выше, а целевой SDK вашего приложения - 23 или выше: приложение должно перечислить разрешения в манифесте и должно запрашивать каждое опасное разрешение, в котором оно нуждается во время работы приложения. Пользователь может предоставлять или отклонять каждое разрешение, и приложение может продолжать работать с ограниченными возможностями, даже если пользователь отклоняет запрос на разрешение.

Следовательно, старые приложения, ориентированные на SDK 22 или ниже, будут видеть старое поведение разрешений, предоставленных во время установки. Только новые приложения, нацеленные на SDK 23 или выше, должны будут немедленно беспокоиться об этом.

На странице есть одно предупреждение, о котором вы должны знать:

Примечание. Начиная с Android 6.0 (уровень API 23), пользователи могут в любое время отзывать разрешения у любого приложения, даже если оно предназначено для более низкого уровня API. Вы должны протестировать свое приложение, чтобы убедиться, что оно работает правильно, когда отсутствует необходимое разрешение, независимо от того, на каком уровне API нацелено ваше приложение.

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

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

Из документации Android:

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

  • Если устройство работает под управлением Android 5.1 или ниже, или целевой SDK вашего приложения равен 22 или ниже: если вы указываете опасное разрешение в манифесте, пользователь должен предоставить разрешение при установке приложения; если они не дают разрешения, система вообще не устанавливает приложение.
  • Если устройство работает под управлением Android 6.0 или выше, а целевой SDK вашего приложения - 23 или выше: приложение должно перечислить разрешения в манифесте и должно запрашивать каждое опасное разрешение, в котором оно нуждается во время работы приложения. Пользователь может предоставлять или отклонять каждое разрешение, и приложение может продолжать работать с ограниченными возможностями, даже если пользователь отклоняет запрос на разрешение.

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