Android 11 прави Google Photos досадно за използване, но може да има поправка

Благодарение на Scoped Storage, Android 11 на определени устройства прави малко неудобно изтриването на изображения в Google Photos, но може да има поправка.

Няма как да знаем колко устройства на пазара работят с Android 11 след Google вече не публикува статистики за разпространение, но вероятно има десетки милиони сега, за които компании като Xiaomi и Samsung са имали време да прокарат актуализацията много техни модели. Ако устройството ви работи с Android 11 и използвате Google Photos, има вероятност да сте се натъкнали на доста досадна промяна в начина, по който приложението обработва изтриването и възстановяването на изображения. Вместо просто да изберете изображенията и видеоклиповете, които искате да изтриете, натиснете иконата на кошчето и след това докоснете „преместване в кошчето“, сега ще трябва да докоснете допълнителна подкана, за да дадете разрешение на Google Photos да изтрие или възстанови вашето файлове.

За тези от вас, които правят много снимки и видеоклипове, може да е досадно да дадат разрешение на Google Photos за изтриване или възстановяване на файл. И както беше посочено от

AndroidPolice, докосването на допълнителен бутон не е единственият проблем, с който може да се наложи да се справите. Ако използвате Google Photos на друго устройство и искате да редактирате или изхвърлите файл, който сте качили от телефона си с Android 11, приложението може да ви помоли да прегледате „несинхронизираните промени“. Това може бързо да стане досадно, ако Google Photos продължава да ви моли да прегледате промените, които току-що сте направили на друга платформа.

Допълнителната стъпка за изтриване или възстановяване на файл не беше необходима в Android 10, но сега се изисква в Android 11 поради налагането на Scoped Storage. Преди Scoped Storage достъпът до цялата външна директория за съхранение се управляваше от един единствен разрешение, което ви затруднява да ограничите какви приложения имат достъп до вашите лични документи, изображения или видеоклипове. С въведеното Scoped Storage Android ограничава колко достъп може да има едно приложение до чувствителни файлове без изрично съгласие на потребителя. Можете да намерите повече подробности за Scoped Storage в тази статия или погледнете графиката на Google по-долу за обобщение на промените.

Докато бяха заети с ограничаване на достъпа до хранилище в Android 11, Google също подобряваше съществуващите API, за да подобри потребителското изживяване. Например, приложения, насочени към Android 11, могат да използват API на MediaStore, за да изхвърлете файл в боклука, вместо да го изтриете. За да премести файл в кошчето обаче, приложението трябва да го направи подкани потребителя да му предостави достъп за запис. Тъй като повечето от изображенията и видеоклиповете, които добавяте към Google Photos от телефона си, идват от друго приложение — като стандартното приложение за камера — Photos трябва да поиска разрешение, преди да може да премести файл към или от боклук. Google Photos обаче не иска разрешение за изхвърляне на файлове в боклука, ако използвате телефон Pixel с инсталиран Android 11. Той обаче иска разрешение на основно всяко друго устройство с Android 11, включително повечето устройства на Samsung, Xiaomi, OnePlus и ASUS. Какво дава?

Причината е, че приложението системна галерия не е подложено на ограничения за обхватно съхранение. Това означава, че приложението фондова галерия може да отваря, редактира или изтрива изображения и видеоклипове без изрично разрешение. Google Photos е предварително зададено като системно приложение за галерия на телефони Pixel, но повечето OEM производители вместо това предварително задават собствено приложение за галерия. Освен това няма настройка за потребителя, която да промени приложението на системната галерия, дори и в екрана „приложения по подразбиране“ на Android. Въпреки това, там е скрит начин за промяна на приложението за системна галерия, но има един голям предупреждение: Само системно приложение може да бъде зададено като приложение за системна галерия. Това означава само телефони, които вече имате предварително инсталиран Google Photos като системно приложение може да се възползва от този трик.

Не много телефони отговарят на този критерий, но въз основа на нашите тестове, можем да потвърдим това работи на повечето телефони OnePlus и някои ASUS. Този метод не работи на нито един от телефоните на Samsung, на които го тествахме, и също така не работи на Xiaomi Mi 10 Pro. Ако имате root достъп или използвате персонализиран ROM, този метод може да работи на вашето устройство, след като систематизирате приложението Google Photos, но ние тествахме този метод само на стандартни устройства.

Как (може би) да направите Google Photos системното приложение за галерия

Заслугите отиват на Kieron Quinn (Куини899 във форумите на XDA) за споделянето на този трик!

Първото нещо, което трябва да направите, е да инсталирате ADB на вашия компютър. Имаме актуализирано ръководство как да направите това тук. След като настроите ADB, въведете следната команда:

adbshellcmdroleadd-role-holderandroid.app.role.SYSTEM_GALLERYcom.google.android.apps.photos

Ако не виждате грешка, вероятно е проработило! Можете бързо да проверите дали работи, като направите снимка и след това опитате да я изтриете в Google Photos. Като алтернатива можете да изпълните следната команда:

adb shell dumpsys role

...и проверете дали „притежателят“ на „android.app.role. SYSTEM_GALLERY" е „com.google.android.apps.photos" (името на пакета на Google Photos).

Ако вашият изход съвпада с текста, маркиран в червения правоъгълник, значи работи.

Какво прави тази команда?

Android 10 добави a нов API, наречен „Роли". Когато дадено приложение има определена роля, автоматично му се предоставя достъп до определени разрешения. Например, на Роля SYSTEM_GALLERY автоматично предоставя на приложението „пълен достъп за четене и запис до всички изображения и видео файлове във външно хранилище, включително достъп до местоположение метаданни." Ролята SYSTEM_GALLERY може да бъде предоставена само на системни приложения и нейният притежател по подразбиране се определя от Android конфигурационна стойност "config_systemGallery." Както обяснихме по-рано, повечето OEM производители предварително задават тази стойност на името на пакета, съответстващо на техния собствено приложение за галерия. Тази стойност не може да бъде променена без модифициране на рамката или инсталиране на наслагване, като и двете изискват root достъп.

Въпреки това, то е възможно е да добавите друго приложение като притежател на ролята SYSTEM_GALLERY, но само ако това приложение също е системно приложение. Това е възможно на много телефони OnePlus и някои ASUS, тъй като тези OEM производители изглежда предварително инсталират Google Photos на системно ниво, а не на ниво потребител. Поради това приложението Google Photos отговаря на условията да притежава ролята SYSTEM_GALLERY и ние се възползваме на скрития интерфейс на обвивката на RoleManager на Android, за да му предоставите достъп до разрешения, които обикновено не могат да бъдат предоставено. Ако се опитате да предоставите ролята SYSTEM_GALLERY на несистемно приложение, ще видите следната грешка в logcat:

ERoleControllerServiceImpl: Packagedoesnotqualifyfortherole, package: com.google.android.apps.photos, role: android.app.role.SYSTEM_GALLERY

За съжаление не намерихме начин да заобиколим това ограничение, но ако го направим, ще споделим нашия метод с общността. Разбира се, бихме предпочели Google просто да направи ролята на SYSTEM_GALLERY дефинирана от потребителя, вместо да се ограничава до избора на OEM.