Здійснилося! На планшет, а саме, на Asus MeMO Pad 7, який я на заміну своєму чесному трудязі, прилетіло оновлення до Android 5.0.1. Тепер у мене є пристрій з льодяником, або, як пишуть в інтернеті, з Лоліпопой.


Обнова прилетіла дещо несподівано. Якщо чесно, я чекав в квітні нову прошивку на телефон (Asus ZenFone 5) - її, по крайней мере, обіцяли. Про планшет ж ніхто нічого не говорив і тут - на тобі, отримаєте і розпишіться.

Це, насправді, збентежило мене (в хорошому, звичайно, сенсі), ще й тому, що планшет я придбав в грудні, і на ньому стояла версія 4.3. Тобто, це другий істотний апдейт операційної системи (Насправді, обнов було більше, але номер версії Android не змінювався). Попередній виробник моїх пристроїв - Samsung - не міг похвалитися такою скорострільністю, хоча, теж двічі оновлював операційну: з Android 3.2 до Android 4.1.2 (через 4.0.1). Тільки ось чекати цих нових версій доводилося значно довше.

Що ж, хай живуть сюрпризи! Отримавши повідомлення про вихід нової версії прошивки, я тут же скачав її, а це більше 700 метрів, і запустив оновлення. Так як качав я не через домашню мережу, А через мобільний, то часу на все про все знадобилося трохи більше: від початку завантаження до завершення оновлення пройшло близько години. Саме оновлення тривало десь хвилин двадцять, але, потенційно, може займати і більше часу - тому, що після установки операційки підходить черга процесу оновлення встановлених програм. У мене лічильник дорахував до 205. Але ось, процес завершився і настав час подивитися, що ж змінилося.

Перше, що кинулося в очі - більш витончена графіка при розблокуванні пристрою. Друге - рука в області сповіщень. Пару днів я її терпів, сподіваючись на те, що випадково десь побачу щось, пов'язане з нею. Не побачив. Тоді став шукати цілеспрямовано і знайшов роз'яснення по ній на 4pda. Виявляється, оповіщення поділили на важливі і не дуже, і є можливість вказати, які сповіщення ви хочете отримувати. Якщо виставити опцію Сповіщати завжди , То рука пропадає, якщо опцію Тільки важливі оповіщення , То рука з'являється. Якщо чесно, руку я прибирав кілька разів, але, чомусь, вона стабільно повертається. Чому? Поки не знаю.

Ось, власне, сама процедура по "прибирання" цієї руки:

Метод, наведений вище, абсолютно не складний. Але можна домогтися результату ще швидше і простіше: натиснути на якусь із двох кнопок управління гучністю - на екрані з'явиться віконце, що дозволяє змінювати рівні гучності для різних компонентів системи, а також, увагу, управляти режимами оповіщення . Правда, чомусь, ці самі режими оповіщення виводяться в такому швидкому варіанті не завжди. Закономірності я поки не знайшов, але, якщо чесно, не дуже-то і шукав.

Кілька слів про встановлені програми. Хоча перед початком процесу оновлення у мене висвітилося попередження про те, що деякі програми будуть видалені, тому що не входять в нову прошивку, тим не менше, більшість програм збереглося.


Єдине, чого мені трохи шкода, це програма з нетиповим назвою "Два додатки". Хоча, зізнатися, я навіть не відразу зрозумів, про що мова: думав, які два додатки будуть видалені, невже назви не можна було вказати.

Так, програма, що з'явилася у версії 4.4.2 і дозволяла поділити екран між двома одночасно працюючими додатками, канула в небуття. По правді кажучи, її функціонал був досить слабенький, так як можна було запускати одночасно дуже обмежене коло додатків. Якщо мені не зраджує пам'ять, я користувався нею всього один або два рази, просто, щоб подивитися, що це таке. Може бути, кому-то буде не вистачати можливостей, що надаються цією програмою, але я, як-то, не дуже засмутився. Хоча, звичайно, не дуже люблю, коли у мене забирають те, що раніше дали.

Ще парочку зауважень з приводу програм. Після того, як я перебрався на новий планшет, я якийсь час встановлював на ньому програми, якими користувався на попередньому своєму пристрої. Деякі з них доводилося, але мова зараз не про них. Мова про тих програмах, в поведінці яких щось змінилося. Звичайно, я встиг спробувати ще не все, але ось, що виявилося на поточний момент.

На KitKat-е у мене зовсім не працював TuniIn Radio Pro, куплений, між іншим. Все йшло гладко - до того моменту, поки черга не доходила безпосередньо до прослуховування будь-якої радіостанції. Тобто, програма запускалася, я вибирав групу радіостанцій, наприклад, Локальні радіостанції, вибирав конкретну станцію (наприклад, RockFM, Радіо Джаз, та взагалі, будь-яку станцію) після чого програма валилася з помилкою. Іноді навіть з'являвся звук, але програма все одно падала. Час минав, виходили поновлення TuneIn Radio, але нічого не змінювалося. Однак, після оновлення до п'ятірки, проблеми чарівним чином зникли, тепер все працює без найменших нарікань.

Ще одна позитивна зміна - офісний пакет SoftMaker Office HD, теж чесно придбаний. Програми, що входять в нього, нормально працювали на самсунговскіе планшеті. Коли я встановив ці програми на новий планшет, вони взагалі не запускалися. Через деякий час вийшло оновлення для цього офісу і становище дещо виправилася: програми стали запускатися, правда, в процесі роботи, в області меню (верхній рядок програмного вікна), накопичувалися якісь дивні графічні артефакти. При перемиканні на робочий стіл (або на інший додаток) і назад артефакти пропадали, але ненадовго. після поновлення Android-а всі програми, що входять в пакет, працюють, як годинник.

Ну і невеликий негативний момент. Я користуюся, дуже активно, програмою під назвою Відеореєстратор. За неї теж я теж гроші віддав. Програма нормально працювала на новому планшеті, ніяких нарікань, плюс, працювали функції, які були недоступні на попередньому планшеті, наприклад, стабілізація відео. Після оновлення ОС програма при старті запису стала стабільно падати. Спочатку, я думав, що виникли якісь проблеми з записом на карту пам'яті - у мене налаштована запис в каталог програми на зовнішньої MicroSD картці. Але, після того, як я в самій програмі зміг створити підкаталог в каталозі записи, стало зрозуміло, що використання зовнішньої картки ні при чому. Тоді я вирішив відключати по одній функції програми, і перше, чого торкнувся палець, був checkbox з галкою стабілізації. Після виключення опції програма стала писати відео, але його якість впало. Ні, дозвіл і швидкість потоку - все залишилося колишнім, але картинка на записи попливла хвилями. У програмі є настройка, яка намагається згладити цей ефект, і, в принципі, її включення кілька допомагає, але, чомусь, при повторному вході в програму, сама позначка, що опція включена, залишається, але картинка пливе, как-будто опція вимкнена . Якщо тицьнути в уже включену опцію, все відразу нормалізується. Швидше за все, це помилка в програмі, я збираюся повідомити про неї розробнику і, можливо, автор виправить цей глюк. Але ось те, що не працює відеостабілізація, трохи напружує. В першу чергу, тому, що штатна програма камери має в налаштуваннях опцію стабілізації і, при її включенні, запис ведеться без помилок.

Від окремих випадків, пов'язаних з програмами, перейду до більш загальних властивостей системи. Ну, по-перше, зросла кількість вільної пам'яті. Як я вже писав, весь мій софт залишився на місці. При цьому, повинен сказати, що я досить сильно напружую планшет. Не в плані того, що постійно ганяю в ігри, а в плані того, що у мене висить маса сервісів, частиною яких я, може, і не користуюся, але тримаю на всякий випадок. Мова, перш за все, йде про всілякі поштовика - Outlook, Yandex Mail, GMail, точніше, зараз вже Inbox. Далі, різноманітні хмарні сховища - Yandex Disk, OneDrive, Google Drive, Dropbox, Box, Asus WebStorage. Парочка соціальних мереж - Однокласники і Google+. Ще всілякі месенджери - Viber, ICQ, Skype, Hangouts. Всі ці програми, так чи інакше, віджиратись пам'ять пристрою, навіть коли ними НЕ користуєшся. Але я, в принципі, усвідомлюю, на що йду.

Користувачі асусовскіх пристроїв знають, що в шторці Android-а є програма, яка дозволяє очистити пам'ять, хоча б, на час. Називається воно в п'ятірці Очищення, а в KitKat звалося більш химерно - Посилення. При відкритті шторки іконка цього додатка показує кількість вільної на даний момент пам'яті. Так ось, коли на планшеті була встановлена \u200b\u200bверсія Android 4.4.2, цифра ця коливалася в діапазоні 200-300 Мб і іконка, найчастіше, була жовтою. Зараз же кількість вільної пам'яті змінюється від 400 до 600 Мб і іконка практично весь час зелена. Напевно, ця зміна пов'язана зі зміною віртуальної машини, Використовуваної в Lollipop, але, можливо, щось змінилося в самій прошивці, наприклад, Asus, що-небудь прибрав. Загалом, треба розбиратися.

Зміна виртуалки повинна була вплинути ще на два параметра - швидкодія і енергоспоживання. Що можу сказати про швидкодію. Та нічого, напевно. У ігрухі я не ганяю, мірятися папугами (Antutu та інше) не дуже люблю. Планшет, сам по собі, досить потужний, тому я гальм не помічав ні на KitKat, ні зараз, в Lollipop. Все плавно і без нарікань. У мене, коли я за кермом, працює відеореєстратор, Стрілка, Карти (або Яндекс, або Гугл), ще я слухаю музику за допомогою Kodi, і, після всього цього, він ще реагує на перемикання на робочий стіл, запуск яких-небудь інших програм, в загальному - звір.

А про енергоспоживання ... В принципі, останній update на KitKat-е позбавив мене можливості скаржитися на неефективність пристрою. Якщо після первинної установки KitKat планшет за ніч втрачав по 20-30 відсотків енергозапасів, то після поновлення до 31-ої версії прошивки втрати стали цілком прийнятними - від двох до п'яти відсотків за ніч. Оновлення до Lollipop нічого не погіршило в цьому сенсі, і на тому велике спасибі. Що ж стосується споживання під навантаженням, тут знову можу навести досвід експлуатації в автомобілі: все ті ж вихідні - відеореєстратор, Стрілка, яндекс.навігатор, Kodi, яскравість екрану десь відсотків 75-80 - яскравий, сонячний день, плюс всі бездротові інтерфейси включені , так ось, за час поїздки - близько двох годин - батарея розрядилася до 57 відсотків. На мій погляд, цілком гідно. До речі, під KitKat було приблизно так само.

Ну і останнє - по черзі перерахування, але не за ступенем важливості - що хотілося б відзначити. Йтиметься про роботу з зовнішньої картою пам'яті. Я, як я виходив з положення, обумовленого обмеженнями KitKat на запис на зовнішню карту пам'яті. Мабуть, вал негативу був настільки сильний, що Google довелося прислухатися і щось змінити. А може вони просто змінили щось, ні до кого не прислухаючись. Але залишимо це важливе питання в стороні (прислухалися / не прислухалися), перейдемо до самих змін.

Google дозволив стороннім програмам писати на карту пам'яті. В принципі, він і раніше не забороняв, просто дозволи були виставлені таким чином, що, при звичайних умовах, доступ на запис на всю зовнішню карту був тільки у рідного файлового менеджера. Ну, може, якісь виробники дозволяли доступ ще й іншим своїм програмам, але я стикався тільки з файловим менеджером. Тепер же писати може будь-яка програма, але для цього має бути виконано кілька умов.

Перше - програма повинна використовувати нові можливості Storage Access Framework, а саме, використовувати Интент OPEN_DOCUMENT_TREE і кілька нових, або оновлених, функцій SDK.

Друге - користувач повинен сам вирішити, до якої саме гілці (або гілках) файлової системи він дасть доступ того чи іншого додатка. Тобто, можна дати доступ до всієї картці, якщо, у відповідь на запит про доступ, вказати її корінь, а можна дати доступ тільки до певної папки і її дочірнім елементам. Загалом, доведеться брати відповідальність на себе, і, в разі чого, нарікати теж доведеться тільки на себе.

Третє - удача. У мене на планшеті все запрацювало, як треба, у товариша на HTC One M8 - не запрацювало, хоча в мережі є відео , Як саме на цій моделі смартфона все чудово оре. Є припущення, правда, що не запрацювало через те, що картка в його телефоні була відформатована якось не так, може, без вказівки імені томи, а може, не в тій файлової системи.

Насправді, це і радісна і сумна звістка одночасно. Радісна - тому, що тепер не треба отримувати root доступ до пристрою і можна не обмежуватися тільки каталогом додатки. Сумна - тому, що поки розробники не зволять скористатися новим API і не випустять нові версії своїх програм, нічого працювати не буде. З мого досвіду: файловий менеджер ES Провідник вже обзавівся підтримкою нового API, і у мене вийшло дати йому права на запис на всю зовнішню SD карту, а файловий менеджер Total Commander - не обзавівся і як і раніше не вміє писати на MicroSD картку - нікуди, крім свого власного каталогу. Ось так.

Насправді, у всій цій історії з записом на зовнішню карту пам'яті, досить багато нюансів. Наприклад, дали ви якимось програмам доступ, а яким - забули. Де подивитися? Я так розумію, що, в даний час - ніде. Тобто, в принципі, подивитися можна, але не на самому планшеті, а на комп'ютері, якщо підключити до нього планшет і скористатися програмою adb. Ось потрібна команда:

Adb shell dumpsys activity providers

Але як те ж саме отримати на планшеті - я не знайшов.

Наступне питання. Ось дали ви якогось додатку доступ для запису в якусь папку, а потім передумали і хочете відібрати. Чи є така можливість? На щастя так. Але, з втратами. Перший, дуже радикальний спосіб - можна видалити програму і заново її встановити. Другий спосіб не настільки кардиналів, але теж не ідеальний - треба в Настройках пристрої очистити дані додатка. Природно, разом з правами доступу, втечуть і інші дані програми, так що, виникає логічне запитання про практичної застосовності даного методу. Інших методів виявити не вдалося, можливо, поки що. Застосовувати обидва способи можна, якщо попередньо забекапіть дані програми, а після приведення якогось з методів в дію - відновити їх. Але тут виникає питання про можливості бекаперов - чи будуть бекапіть тільки дані, або ж дані разом з дозволами? Якщо з дозволами, то після відновлення, ну, самі розумієте ... Все це сильно залежить від конкретних використовуваних додатків, так що, слід бути дуже уважними. І це ще один хороший привід подумати, перш ніж побачити давню Москву без санкції відповідних органів видати права будь-якого з додатком на доступ до файлової системи зовнішньої картки.

Дальше більше. Що буде, якщо ви зміните картку, вставлену в слот вашого планшета? Відповідь така: вам доведеться окремо давати доступ до кожної картці, яку ви вставляєте в пристрій. В принципі, це, напевно, логічно. Тобто, дали ви файлового менеджера доступ до кореня картки, потім вийняли її і вставили іншу. Файловий менеджер писати на нову картку не буде, доведеться давати доступ заново. Зате коли ви повернете першу картку в планшет, файловий менеджер буде писати на неї без проблем.

Ще одне питання. Ось дали ви доступ додатком в якусь папку, не в кореневу. Минув час і вам знадобилося дозволити доступ на запис цієї ж програми в іншу папку на цій же картці. Можна це зробити? В принципі, це наслідок попереднього випадку, тому відповідь: так, можна. Тобто, система для кожної програми буде пам'ятати список каталогів, до яких ви дали право доступу на запис.

Тепер нюанс, пов'язаний з додатками, встановленими на планшеті для кожного користувача, профіль якого створений на пристрої. Тут теж все логічно - для кожного користувача пристрою зберігаються свої права доступу згідно з додатками, тобто, кожен - сам коваль свого щастя, або, якщо хочете, сам собі злий Буратіно.

Ну і звичайно, дуже багато залежить від кваліфікації розробників. Може так статися, що ви дасте права будь-якій програмі на доступ до зовнішньої картці на запис, а після перезавантаження планшета виявите, що доступу то і немає. Винен в такій ситуації тільки розробник програми - він не подбав про те, щоб зберегти отриманий дозвіл. Можливо, вам варто задуматися і пошукати альтернативу цій програмі, тому що мало там чого такий програміст не передбачив.

А, так, ось так виглядає процес видачі прав на запис на microSD картку для ES Проводнка:

Нам потрібна зовнішня картка

Спробуємо створити що-небудь прямо в корені карти






Нам потрібно відобразити SD карту


Ось вона, наша зовнішня карта пам'яті



Ну ось тепер, мабуть все.

P.S. Так вийшло, що з моменту, як я написав цей матеріал, пройшло вже досить багато часу. Опублікувати можна було вже багато разів, але я все тягнув, незрозуміло чому. Точніше, я знаю, чому - все вирішував, як краще представляти серію знімків екрана, що описує той чи інший процес: як просто послідовність вставлених зображень, або ж у вигляді слайд шоу. В кінцевому рахунку, рішення було прийнято - використовувати (по крайней мере, поки) послідовність зображень. Як все це відбувалося - тема для окремого посту. Поки ж, все залишається як є, шкода тільки, що часу витрачено багато. Втішає лише, що не дарма. До того ж, сталася приємна подія. Я писав в цьому повідомленні, що доступ до зовнішньої карті пам'яті буде доступний тільки тоді, коли автори програм почнуть використовувати новий API. Як приклад програми, в якому нове API не використовується, я привів Total Commander. Так ось, поки я не поспішав з публікацією, Total Commander оновився, і тепер він теж вміє працювати з зовнішньої картою пам'яті в стилі Android Lollipop. Нижче я привожу серію знімків екрана, що описують процес створення нового каталогу в корені зовнішньої карти пам'яті за допомогою Total Commander:

Вибираємо зовнішню карту пам'яті
і в меню вибираємо потрібний пункт
Ось тепер, мабуть, все.

Я купив новий телефон Samsung Galaxy S5, і відразу зіткнувся з проблемою в операційній системі Android. А точніше, версії Андроїд 4.4 KitKat. У цій версії Андроїд введена нова фішка розробників Google.

Тепер додаткам заборонений доступ до редагування файлів на SD карті!Це призводить до того, що деякі програми непрацездатні!

Я розповім вам, як обійти цю проблему!

Добрий день, шановні читачі нашого блогу!

Днями я купив собі новий телефон! Samsung Galaxy S5!

НАСОЛОДА НОВИМ ТЕЛЕФОНОМ

Вітаю себе з вдалою покупкою, про яку мріяв кілька років! Телефон виявився чудово швидким, потужним, красивим і зручним!

Раніше у мене вже був телефон HTC (йому вже близько 4-5 років) з Андроїд системою. Один з перших телефонів з такою системою (на момент покупки). Я його вивчив вздовж і поперек, перепрошивати систему кілька разів, вибрав прошивку Андроїд, яка по функціоналу багато перевершувала на той момент офіційну.

Для тих, хто не в курсі, перепрошивка - це заміна операційної системи телефону. Ну приблизно як перевстановлення Windows на комп'ютері.

Минуло багато часу, вийшло багато версій Андроїд (на момент покупки у мене була Андроїд 2.2). Нові версії і телефони, на яких вони встановлювалися, багато перевершують мій старенький смартфон. Тому я був сильно здивований міццю, швидкістю і функціональністю.

Насолоджувався я близько 4 діб. Потім натрапив на проблему!

ПРОБЛЕМА! Файлова система забороняє редагування файлу!

Після чергового оновлення, операційна система телефону сама оновилася до версії Андроїд 4.4

Яке ж було моє здивування, коли я не зміг відредагувати жоден файл на власному телефоні! Спочатку я грішив на глюки, перевірив в різних папках, спробував відредагувати файл з комп'ютера (приєднавши кабель до телефону). Ніяким способом не виходило редагувати файли!

Подивившись інформацію про операційну систему в Настройки - Інформація про пристрій - Стан SE для Android я побачив слово Enforcing.

Це кодове слово Google означає версію Андроїд, де на рівні ядра операційної системи обмежені права додатків! Емае! Ну я потрапив!

Я звернувся до інтернету за рішенням проблеми

Ось, що я виявив:

Х очу помітити, що мій телефон зовсім новий, з гарантією від виробника на 5 років!

Якщо получітьRoot-доступ (адміністраторські права в системі Андроїд), то гарантія від виробника (Samsung) зникає. По правді сказати, деякі хакерські сайти стверджують, що є спеціальні методи повернути заводський лічильник до початкового стану. Заводський лічильник при получаніі Root-доступу обнуляється. Це показує обслуговуючої компанії про те, що телефон був зламаний, і гарантія на нього не поширюється.

Щоб вплинути на цей лічильник, потрібно розібрати телефон і залізти в мікросхеми. Тому не ведіться на такі обмани!

Якщо ви отримаєте Root-доступ, то гарантія у вас зникне! Перевірено на своєму старому телефоні!



У новій версії Андроїд 5.0 Google використовує іншу логіку заборони на доступ до зовнішніх SD-карт пам'яті.

1. Яким чином працює нова логіка?

Додатки встановлюються в систему в скомпільованому вигляді. Тобто у вигляді, готовому до запуску. Це збільшує швидкодію, багатозадачність і зменшує витрату батареї.

Іншими словами, раніше в системі були файли дистрибутивів ( файли) І система, при запуску програми, компілювати його, перед запуском. Іншими словами, файли були запаковані, під час запуску програми, файли розпаковувалися і запускалися.

Тепер, в Андроїд 5.0, всі програми встановлюються в скомпільованому, разархивированном вигляді. Це призводить до того, що додатки витрачають більше місця, але швидше виконуються!

2. До чого це призводить?

  1. Права доступу задаються додатком ПРИ ВСТАНОВЛЕННЯ!
  2. Користувач має право сам встановлювати права певної програми при установці.
  3. Користувач може змінити права додатком. Наприклад, якщо ви довіряєте якійсь програмі, то можете дозволити їй редагування файлів на зовнішній карті пам'яті.

Я ХОЧУ ОНОВИТИ андроїд ДО ВЕРСІЇ 5.0, щоб вирішити проблему!

Якщо я оновлю ОФІЦІЙНО версію операційної системи, то я збережено гарантії!

Але мені потрібна версія Андроїд для Росії (саме для неї, а не для іншої країни), щоб не мучитися з англійськими словами в інтерфейсі.

Спробую знайти її.

Офіційна програма підтримки Samsung телефонів Kies говорить, що мій телефон оновлений до останньої версії По.

Офіційних оновлень Андроїд (для нашого регіону) я не знайшов на офіційних сайтах.

На форумах я знайшов інформацію, що Google випустила версію прошивки для Росії в січні 2015. Але дуже повільно впроваджується на апарати клієнтів.

Таким чином, я можу почекати, поки на мій апарат не надійде повідомлення про те, що є оновлення По. Після цього я зможу оновити Андроїд.

Розробляючи додаток для проведення змагань, я зіткнувся з проблемою зберігання бази даних. Проблема полягала в тому, як мені визначити зовнішню карту пам'яті. В цілому пошук в мережі точної відповіді не дав. Тому, об'єднавши всі знайдені результати, я зібрав свій клас. Якщо кому цікаво, дивимося під катом.

Отже, почнемо з теорії.

Термінологія

Гугл нам говорить, що є такі поняття:
  1. Внутрішня ( internal) Пам'ять - це частина вбудованої в телефон карти пам'яті. При її використанні за замовчуванням папка додатки захищена від доступу інших додатків (Using the Internal Storage).
  2. зовнішня ( external) Пам'ять - це загальне «зовнішнє сховище», тобто це може бути як частина вбудованої пам'яті, так і видаляється пристрій. Зазвичай це частина вбудованої пам'яті, як видаляється пристрій я бачив в останній раз на Андройде 2.2, де вбудована пам'ять була близько 2 Гб, і підключається пам'ять ставала зовнішньої (Using the External Storage).
  3. видаляється ( removable) Пам'ять - все сховища, які можуть бути видалені з пристрою без «хірургічних» втручань.

До версії KitKat 4.4 API не надавало функціоналу для отримання шляхів до зовнішньої пам'яті. Починаючи з цієї версії (API 19) з'явилася функція public abstract File getExternalFilesDirs (String type), яка повертає масив рядків з шляхами до внутрішньої і зовнішньої пам'яті. Але як же бути з нашої SD Card, яка вставлена \u200b\u200bв слот? Шлях до неї ми знову не можемо отримати.

Результати пошуку

Щоб відповісти на поставлене запитання я звернувся до всезнаючого Гуглу. Але і він мені не дав чіткої відповіді. Було розглянуто безліч варіантів визначення від використання стандартних функцій, які ведуть до зовнішньої пам'яті, але нічого спільного з видаляються пристроями зберігання даних вони не мають, до обробки правил монтування пристроїв (Android же на ядрі Linux працює). В останніх випадках були використані «зашиті» шляху до папки з прімонтірованимі пристроями (в різних версіях ця директорія різна). Не варто забувати, що від версії до версії правила монтування змінюються.

В кінцевому підсумку я вирішив об'єднати всі отримані знання і написав свій клас, який може нам повернути шляху до зовнішніх і видаляється пристроїв.

опис коду

Був створений клас MountDevice, Який містить в собі шлях до пристрою, тип пристрою і якийсь хеш.
Типів пристроїв виділено два (внутрішню пам'ять я не став чіпати, так як до неї доступ можна отримати через API системи).

Public enum MountDeviceType (EXTERNAL_SD_CARD, REMOVABLE_SD_CARD)
І був створений клас StorageHelper, Який і здійснює пошук доступних карт пам'яті.

У класі StorageHelper реалізовано два способи пошуку - через системне оточення ( Environment) І з використанням утиліти Linux mount, А точніше результату її виконання.

Спосіб перший - Environment
При роботі з оточенням я використовую стандартну функцію getExternalStorageDirectory () для отримання інформації про зовнішній пам'яті. Щоб отримати інформацію про видаляється пам'яті, я використовую змінну оточення " SECONDARY_STORAGE".

зовнішня пам'ять завжди одна і зазвичай завжди є, тому перевіряємо її на читаність, обчислюємо хеш і запам'ятовуємо. Видаляється пам'яті може бути багато, тому необхідно отриманий рядок розбити по разделителю і перевіряти кожне значення.

функція fillDevicesEnvirement

String path \u003d android.os.Environment.getExternalStorageDirectory () .getAbsolutePath (); if (! path.trim (). isEmpty () && android.os.Environment.getExternalStorageState (). equals (android.os.Environment.MEDIA_MOUNTED)) (testAndAdd (path, MountDeviceType.EXTERNAL_SD_CARD);) // Отримуємо ремувабл String rawSecondaryStoragesStr \u003d System.getenv ( "SECONDARY_STORAGE"); if (rawSecondaryStoragesStr! \u003d null &&! rawSecondaryStoragesStr.isEmpty ()) (// All Secondary SD-CARDs splited into array final String rawSecondaryStorages \u003d rawSecondaryStoragesStr .split (File.pathSeparator); for (String rawSecondaryStorage: rawSecondaryStorages) (testAndAdd (rawSecondaryStorage, MountDeviceType.REMOVABLE_SD_CARD);))


Варіант рішення взято зі stackoverflow. Відповідь десь там внизу.
Спосіб другий - mount
Так як у мене довго не виходило змусити систему мені сказати шлях до видаляється пам'яті, я вирішив шукати в сторону примонтировать пристроїв. В системі є файли конфігурації, в яких описані правила монтування зовнішніх пристроїв. Все б добре, але на Android версії 4. * до цього файлу простим смертним доступу немає, тому розглядати цей спосіб не буду.

Повернемося до утиліти mount. При запуску без параметрів команда повертає список змонтованих файлових систем. Видаляються пристрої мають зазвичай формат файлової системи FAT, то будемо виділяти рядки, в яких є характеристика " fat". Зовнішня пам'ять буде характеризуватися параметром" fuse".

Примітка: при використанні такого способу не завжди коректно (швидше за все я щось не врахував) визначаються типи смотнтірованних пристроїв. Різницю помічав на різних версіях Android. Тому цей спосіб можна використовувати як додатковий.

функція fillDevicesProcess

try (Runtime runtime \u003d Runtime.getRuntime (); proc \u003d runtime.exec ( "mount"); try (is \u003d proc.getInputStream (); isr \u003d new InputStreamReader (is); br \u003d new BufferedReader (isr); while ( (line \u003d br.readLine ())! \u003d null) (if (line.contains ( "secure")) continue; if (line.contains ( "asec")) continue; if (line.contains ( "fat") ) (// TF card String columns \u003d line.split ( ""); if (columns! \u003d null && columns.length\u003e 1) (testAndAdd (columns, MountDeviceType.REMOVABLE_SD_CARD);)) else if (line.contains ( " fuse ")) (// internal (External) // storage String columns \u003d line.split (" "); if (columns! \u003d null && columns.length\u003e 1) (// mount \u003d mount.concat (columns +" \\ n "); testAndAdd (columns, MountDeviceType.EXTERNAL_SD_CARD);)))) finally (...)) catch (Exception e) (...)

Вихідний код всього класу розташований ще ніде не розташований. Днями постараюся розмістити на gitHub.

Хто ще якими способами користується?

Теги: Додати теги

Багато щасливі власники пристроїв з 4.4.2 «на борту» вже напевно зіткнулися з проблемою неможливості запису даних на флешкарти більшістю додатків, встановлених на девайсі. Зроблено, по запевненнях компанії Google для того, щоб зробити ОС Android 4.4.2 KitKat більш захищеною системою.

Обмеження запису на флешкарти стосуються насамперед додатків, встановлених з сторонніх джерел. І, найголовніше, в Android 4.4.2 KitKat забороняється модифікація файлів, які не мають прямого стосунку до додатків, які хочуть зробити цю модифікацію. Звідси і неможливість запису на SD-карту.

На практиці це обмеження означає буквально наступне: користуйтеся стандартними мессенджерами, фоторедакторами, файловими менеджерами! Тому що, коли розробник вашого ПО не зміг вчасно відреагувати і додати оновлення до вашого фоторедактор, наприклад, то всі ваші відредаговані фотки будуть «живі» поки працює фоторедактор - записати щось на карту ваші відредаговані фотки у вас вже не вийде!

Більш просунуті користувачі, постійно копіюють дані з флешки на комп'ютер і назад, можуть зіткнутися з такою проблемою: комп'ютер визначати визначає вашу «», бачить файли, але ось що-небудь зробити з ними вже не може - відмова в доступі! Цю проблему можна поправити, встановивши на свій девайс додаток, яке дасть доступ к. Але робити це додаток буде тільки на ROOT-іровани пристроях.


Працює SDFix: KitKat Writable просто: після установки і запуску програми, ви натискаєте на Продовжити ( «Continue»), погоджуєтеся з умовами і знову натискаєте на Продовжити ( «Continue»). Якщо на вашому пристрої вже встановлено додаток Superuser, то вам слід дозволити в ньому доступ SDFix до ROOT-тек.


SDFix KitKat Writable MicroSD в процесі своєї роботи змінить файл /system/etc/permissions/platform.xml, в якому пропише дозвіл для запису і модифікації файлів додатками, які мають роздільну здатність WRITE_EXTERNAL_STORAGE. Оригінал зміненого SDFix: KitKat Writable MicroSD файлу ви зможете знайти на ім'я platform.xml.original-pre-sdfix. Згодом ви завжди зможете відновити оригінальний файл.

Для самих «рукатих» користувачів, що володіють ROOT-доступом на своєму пристрої, є варіант внести виправлення в потрібний файл, Не вдаючись до допомоги SDFix: KitKat Writable MicroSD.

Для цього запустіть файл-менеджер, який може редагувати файли, знаходите файл platform.xml за адресою / system / etc / permissions /, і відкриваєте його за допомогою вбудованого редактора.


Після цього знаходите секції android.permission.WRITE_MEDIA_STORAGE і android.permission.WRITE_EXTERNAL_STORAGE і додаєте в цих секціях рядки з кодом:







Після цього в редакторі збережіть змінений файл.

Після перезавантаження пристрою всі неприємні проблеми, пов'язані з неможливістю записи і модифікації файлів на флеш-карті будуть вирішені.