этот контент нельзя открывать в рабочих приложениях
Разберемся, как настроить открытие ссылок в приложениях на Xiaomi
Приложения, установленные на наших смартфонах, не только предоставляют возможность приятного использования тех или иных сервисов, но и также помогают весьма удобно просматривать ссылки, связанные с данными сервисами.
Например, ваш друг может отправить вам ссылку на аккаунт своего знакомого в VK, и при нажатии на нее вы перейдете на страницу этого человека именно в приложении Вконтакте. Данная функция уже давно работает на всех современных Андроид-смартфонах, в том числе и устройствах от Xiaomi.
Однако иногда происходит сбой, и ссылки открываются не в установленных приложениях, а в браузере, что не только раздражает, но иногда может привести к ситуации, когда вы просто не сможете выполнить желаемое действие, доступное в приложении.
Сегодня мы разберемся, как настроить открытие ссылок в приложениях на Xiaomi.
Причина появления данной ошибки
На самом деле, причин отказа открытия ссылок в соответствующих приложениях может быть много: некорректная установка (или переустановка) приложения, баг в прошивке, сброс настроек и т.д.
Не стоит бояться этого сбоя – программисты Xiaomi встроили в прошивку MIUI очень удобный способ включения данной функций.
Решение проблемы
Чтобы ссылки снова открывались в установленных на вашем Xiaomi приложениях, нужно вручную выставить данную функциональность в настройках.
Для этого нам необходимо зайти в общие Настройки устройства и прокрутить список разделов до пункта «Приложения». Нажимаем по нему и попадаем в меню глубоких настроек – здесь нам нужно выбрать пункт «Все приложения».
Открывается список всех установленных на смартфоне приложений. В правом верхнем углу мы видим иконку в виде трех точек – нажимаем на нее и наблюдаем появление нового окошка, в котором нам необходимо выбрать пункт «Приложения по умолчанию».
Внутри нас ждет тонкая настройка процесса открытия ссылок. Например, выбираем приложение 4PDA, и в следующем окне нажимаем на кнопку «Открывать поддерживаемые ссылки». Вас встретит выбор из трех позиций: «Открывать», «Всегда спрашивать» и «Не открывать». Естественно, выбираем пункт «Открывать», и в следующий раз при открытии ссылки вы попадете не на ее страницу в браузере, а сразу в удобное для вас приложение.
Дополнительный способ выбора приложения для открытия ссылок
Если первый вариант не сработал, то на помощь вам придет еще один способ выбора приложения для открытия ссылок.
Прощелкав несколько необходимых для вас ссылок, вы навсегда настроите поддержку приложений, а ссылки «общего» характера будут открываться только в Браузере.
Как мы видим, решить вопрос с отказом открытия ссылок в приложении очень просто, и справиться с этим может абсолютно любой пользователь.
Этот контент нельзя открывать в рабочих приложениях
Краткое описание:
Утилита для изоляции и заморозки приложений без root.
Описание:
Заморозка приложений, чтобы подавить их фоновую активность; защита от не вызывающих доверия приложений; использование сразу двух копий приложения, привязанных к разным аккаунтам; архивация редко используемых приложений; скрытие приложений.
Island использует функцию managed profile (управляемый профиль), появившуюся в Android 5.0 как часть платформы Android for Work. Managed profile позволяет создать нечто вроде контролируемой среды исполнения приложений, которая будет определять, какие приложения могут работать в этой среде и к каким функциям смартфона они будут иметь доступ. Island использует эту возможность, чтобы по максимум отрезать указанные тобой приложения от системы, полностью сохранив их работоспособность (фактически они этого даже «не поймут»).
Все, что нужно сделать, — это выбрать приложение в списке, после чего оно будет клонировано и размещено в песочнице. После этого можно удалить оригинал и спокойно использовать клон приложения, не заботясь о том, что оно сможет прочитать список твоих контактов, историю звонков, просмотреть фото и тому подобное. В любой момент приложение можно заморозить (для этого необходимо тапнуть на приложение и нажать значок замка). После этого система его не увидит. Ты даже можешь настроить автоматическую заморозку приложений при выключенном экране с помощью Greenify.
Сам автор предлагает следующие варианты использования Island:
Island — полностью бесплатная утилита, но для ее установки из Google Play необходимо присоединиться к команде тестировщиков (это можно сделать прямо на странице Island в Google Play).
Требуется Android: 5.0 и выше, 7.0 и выше
Русский интерфейс: Нет
Версия: 4.5.4 Pre-release Github (schqual)
Версия: 4.0.1 Сборка от разработчика (xdimquax)
Версия: 3.8 GP (•Лeший•)
версия: 3.5.3 Island (Пост LinkinPro #83290046)
версия: 3.5.3 Mod Rus Сообщение №209, автор LinkinPro
версия: 3.1.0 Сообщение №206, автор LinkinPro
версия: 3.0.6 Island (Пост алекс12 #79482801)
версия: 2.8.1 Сообщение №166, автор алекс12
версия: 2.7.5 Сообщение №132, автор алекс12
версия: 2.7.2 Сообщение №116, автор washerron
версия: 2.7 Сообщение №115, автор Ruslan Altuhov
версия: 2.5.4 Island (Пост DimiONs #69080245)
версия: 2.5.3 Island (Пост DimiONs #69006462)
версия: 2.0 beta 5 Island 2.0 beta 5.apk ( 1.62 МБ )
Этот контент нельзя открывать в рабочих приложениях
Краткое описание:
Утилита для изоляции и заморозки приложений без root.
Описание:
Заморозка приложений, чтобы подавить их фоновую активность; защита от не вызывающих доверия приложений; использование сразу двух копий приложения, привязанных к разным аккаунтам; архивация редко используемых приложений; скрытие приложений.
Island использует функцию managed profile (управляемый профиль), появившуюся в Android 5.0 как часть платформы Android for Work. Managed profile позволяет создать нечто вроде контролируемой среды исполнения приложений, которая будет определять, какие приложения могут работать в этой среде и к каким функциям смартфона они будут иметь доступ. Island использует эту возможность, чтобы по максимум отрезать указанные тобой приложения от системы, полностью сохранив их работоспособность (фактически они этого даже «не поймут»).
Все, что нужно сделать, — это выбрать приложение в списке, после чего оно будет клонировано и размещено в песочнице. После этого можно удалить оригинал и спокойно использовать клон приложения, не заботясь о том, что оно сможет прочитать список твоих контактов, историю звонков, просмотреть фото и тому подобное. В любой момент приложение можно заморозить (для этого необходимо тапнуть на приложение и нажать значок замка). После этого система его не увидит. Ты даже можешь настроить автоматическую заморозку приложений при выключенном экране с помощью Greenify.
Сам автор предлагает следующие варианты использования Island:
Island — полностью бесплатная утилита, но для ее установки из Google Play необходимо присоединиться к команде тестировщиков (это можно сделать прямо на странице Island в Google Play).
Требуется Android: 5.0 и выше, 7.0 и выше
Русский интерфейс: Нет
Версия: 4.5.4 Pre-release Github (schqual)
Версия: 4.0.1 Сборка от разработчика (xdimquax)
Версия: 3.8 GP (•Лeший•)
версия: 3.5.3 Island (Пост LinkinPro #83290046)
версия: 3.5.3 Mod Rus Сообщение №209, автор LinkinPro
версия: 3.1.0 Сообщение №206, автор LinkinPro
версия: 3.0.6 Island (Пост алекс12 #79482801)
версия: 2.8.1 Сообщение №166, автор алекс12
версия: 2.7.5 Сообщение №132, автор алекс12
версия: 2.7.2 Сообщение №116, автор washerron
версия: 2.7 Сообщение №115, автор Ruslan Altuhov
версия: 2.5.4 Island (Пост DimiONs #69080245)
версия: 2.5.3 Island (Пост DimiONs #69006462)
версия: 2.0 beta 5 Island 2.0 beta 5.apk ( 1.62 МБ )
Обновляемся на новую версию API Android по наставлению Google
Скоро выходит Android 12, но в этом августе уже с 11-й версии разработчикам придётся использовать новые стандарты доступа приложений к внешним файлам. Если раньше можно было просто поставить флаг, что ваше приложение не поддерживает нововведения, то скоро они станут обязательными для всех. Главный фокус — повышение безопасности.
Переход на новую версию API — довольно трудоёмкая операция, требующая больших затрат на её поддержку при введении крупных апдейтов. Далее расскажу немного про наш переход и возникшие при этом трудности.
Что происходит
Если вы уже знакомы с теорией, то этот раздел можно пропустить — тут я хочу поверхностно сравнить подходы к предмету в разных версиях операционной системы.
В Android есть внутреннее Internal Storage (IS) и внешнее хранилище External Storage (ES). Исторически это были встроенная память в телефоне и внешняя SD-карта, поэтому ES был больше, но медленнее и дешевле. Отсюда и разделение — настройки и критически важное записывали в IS, а в ES хранили данные и большие файлы, например, медиа. Потом ES тоже стал встраиваться в телефон, но разделение, по крайней мере логическое, осталось.
У приложения всегда есть доступ к IS, и там оно может делать что угодно. Но эта папка только для конкретного приложения и она ограничена в памяти. К ES нужно было получать доступ и, кроме манипуляции со своими данными, можно было получить доступ к данным других приложений и производить с ними любые действия (редактировать, удалять или украсть).
Но после разделения на внутреннее и внешнее хранилища все равно оставались проблемы. Многие приложения могли хранить чувствительную информацию не только в IS, но и в ES — то есть ответственность лежала целиком на разработчиках и на том, кто хочет завладеть файлами.
В Android решили всё это переделать ещё в 10-й версии, а в 11-й это стало обязательным.
Чтобы минимизировать риски для пользователя в Google решили внедрить Scoped Storage (SS) в ES. Возможность проникнуть в папки других приложений убрали, а доступ есть только к своим данным — теперь это сугубо личная папка. А IS с 10-й версии ещё и зашифрована по умолчанию.
В Android 11 Google зафорсировала использование SS — когда таргет-версия SDK повышается до 30-й версии API, то нужно использовать SS, иначе будут ошибки, связанные с доступом к файлам. Фишка Android в том, что можно заявить совместимость с определённой версией ОС. Те, кто не переходили на 11, просто говорили, что пока не совместимы с этой версий, но теперь нужно начать поддерживать нововведения всем. С осени не получится заливать апдейты, если не поддерживаешь Android 11, а с августа нельзя будет заливать новые приложения.
Если SS не поддерживается (для девайсов ниже 10-й версии), то для доступа к данным других приложений требуется получить доступ к чтению и записи в память. Иначе придётся получать доступ к файлам через Media Content, Storage Access Framework или новый, появившийся в 11-м Android, фреймворк Datasets в зависимости от типа данных. Здесь тоже придётся получать разрешение доступа к файлу, но по более интересной схеме. Когда расшариваемый файл создаёшь сам, то доступ к нему не нужен. Но если переустановить приложение — доступ к нему опять потребуется. К каждому файлу система привязывает приложение, поэтому когда запрашиваешь доступ, его может не оказаться. Особо беспокоиться не нужно, это сложно отследить, поэтому лучше просто сразу запрашивать пермишен.
Media Content, SAF и Datasets относятся к Shared Storage (ShS). При удалении приложения расшаренные данные не удаляются. Это полезно, если не хочется потерять нужный контент.
Хотя даже при наличии SS можно дать доступ к своим файлам по определённой технологии — через FileProvider можно указать возможность получения доступа к своим файлам из другого приложения. Это нормально, потому что файлы расшаривает сам разработчик.
Также добавилась фича — если приложение не использовалось несколько месяцев, то снимаются все пермишены и доступы к системным элементам. По best practice разрешение запрашивается по необходимости (то есть непосредственно перед использованием того, на что спрашиваем разрешение), поэтому мы просто перед выполнением какого-либо действия проверяем, есть ли у нас пермишены. Если нет, то запрашиваем.
В то же время перекрыли доступы к приложениям внутри девайса. Если раньше можно было отследить, что установлены определённые приложения и отправлять к ним соответствующие интенты, то сейчас мы должны прямо в манифесте прописать, что работаем именно с этими приложениями, и только после этого получить доступ.
В качестве примера можем взять шаринг — мы шарим множество приложений, и их всех нужно указывать в манифесте, иначе они не обнаружатся. Начнём перебирать пакет установленных приложений — будет информация, что не указанного в манифесте приложения нет и при шаринге всё отвалится.
Перейдём к практике.
Переход на новую версию
Основная функциональность по работе с файлами в приложении iFunny представлена в виде сохранения мемов в память и расшаривания их между приложениями. Это было первое, что требовалось починить.
Для этого выделили в общий интерфейс работу с файлами, реализация которого зависела от версии API.
FilesManipulator представляет собой интерфейс, который знает, как работать с файлами и предоставляет разработчику API для записи информации в файл. Copier — это интерфейс, который разработчик должен реализовать, и в который передаётся поток вывода. Грубо говоря, мы не заботимся о том, как создаются файлы, мы работаем только с потоком вывода. Под капотом до 10-й версии Android в FilesManipulator происходит работа с File API, после 10-й (и включая её) — MediaStore API.
Рассмотрим на примере сохранения картинки.
По сути, вся работа с файлами реализована через эти классы. Шаринг в другие приложения автоматически сохраняют медиа в память устройства и последующая работа с URI уже происходит по новому пути. Но есть такие SDK, которые ещё не успели перестроиться под новые реалии и до сих пор используют File API для проверки медиа. В этом случае используем кеш из External Storage и при необходимости провайдим доступ к файлу через FileProvider API.
Помимо ограничений с памятью в приложениях, таргетированных на 30-ю версию API, появилось ограничение на видимость приложения. Так как iFunny использует шаринг во множество приложений, то данная функциональность была сломана полностью. К счастью, достаточно добавить в манифест query, открывающую область видимости к приложению, и можно будет также полноценно использовать SDK.
Для неявных интентов тоже приходится добавлять код в манифест, чтобы задекларировать то, с чем будет работать приложение. В качестве примера выложу часть кода, добавленного в манифест.
После проверок запуска UI-тестов на девайсах с версиями API 29-30 было выявлено, что они также перестали корректно отрабатываться.
Первоначально в LogCat обнаружил, что приложение не может приконнектиться к процессу Orchestrator и выдает ошибку java.lang.RuntimeException: Cannot connect to androidx.test.orchestrator.OrchestratorService.
Эта проблема из разряда видимости других приложений, поэтому достаточно было добавить строку
Тест удачно запустился, но возникла другая ошибка — Allure не может сохранить отчёт в память устройства, падает с ошибкой.
Очевидно из-за Scoped Storage стало невозможно сохранять файлы в другие папки, поэтому снова почитав документацию по управлению файлами в памяти на девайсе, обнаружил интересный раздел. Там рассказано, как для нужд тестов открыть доступ к папкам девайса, но с существенными ограничениями, которые можно почитать тут.
На Android 11 тесты удачно запустились и стали проходить без ошибок.
Запустил тесты — всё еще не происходит сохранения в память отчёта. Тогда я обнаружил, что в манифесте WRITE_EXTERNAL_STORAGE ограничен верхней планкой до 28 версии API, то есть запрашивая работу памятью мы не предоставили все разрешения. После изменения верхней планки (конечно, для варианта debug) и запроса пермишена на запись тесты удачно запустились и отчёт Allure сохранился в память устройства.
Добавлены следующие определения пермишенов для debug-сборки.
После всех вышеописанных манипуляций с приложением, можно спокойно устанавливать targetSdkVersion 30, загружать в Google Play и не беспокоиться про дедлайн, после которого загружать приложения версией ниже станет невозможно.
[Вопросы] Доступ к закрытым папкам на свежих обновлениях MIUI
Здравствуйте, уважаемые Mi фаны! |
MIUI 12 доступ к защищенным папкам.png (132.38 KB, Downloads: 8)
2021-02-10 01:31:05 Upload
Сейчас появляется много вопросов на счет доступа к таким папкам, как /Android/data, /Android/obb. Так как на свежих обновлениях MIUI 12 с Android 11 они оказались закрытыми? и система не дает возможность их редактировать. А это бывает нужно, например, при копировании кэша от любимой игрушки.
Для этого нам понадобится сторонний файловый менеджер. Тут уж можете выбирать на свой вкус. Например MiXplorer, Total Commander, ES Проводник и т.д. Я покажу, как это сделать на примере Total Commander.
Для начала скачиваем и устанавливаем его с маркета. ))
Дальше идем в нужную папку. Например, кэш нам нужно записать в obb, пытаемся создать папку и, соответственно, получаем отказ.
01.jpg (160.71 KB, Downloads: 7) 2021-02-10 00:53:15 Upload | 02.jpg (178.48 KB, Downloads: 7) 2021-02-10 00:53:15 Upload Нажимаем на *Мои приложения* и видим, что папка obb защищена от записи. Так же нам будет предложено дать разрешение на запись.
|