Android как сохранить свои файлы

Android с нуля: как хранить данные приложения локально

Russian (Pусский) translation by Ellen Nelson (you can also view the original English article)

Когда доходит до сохранения данных приложений локально, разработчики Android определённо избалованы выбором. Помимо прямого доступа к внутренним и внешним областям хранения Android-устройства, платформа Android предлагает базы данных SQLite для хранения реляционных данных и специальные файлы для хранения пар ключ-значение. Более того, приложения для Android также могут использовать сторонние базы данных, которые предлагают поддержку NoSQL.

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

Вам проще учиться по видео? Почему бы не посмотреть наш курс:

1. Хранение пар ключ-значение

Если вы ищете быстрый способ хранения нескольких строк или номеров, вам следует рассмотреть возможность использования файла настроек (preferences). Активити и службы Android могут использовать метод getDefaultSharedPreferences() класса PreferenceManager , чтобы ссылаться на объект SharedPreferences , который может быть использован и для чтения, и для записи в файл настроек по умолчанию.

Чтобы начать запись в файл настроек, вы должны вызвать метод edit() объекта SharedPreferences , который возвращает объект SharedPreferences.Editor .

Объект SharedPreferences.Editor имеет несколько интуитивных методов, которые можно использовать для хранения новых пар ключ-значение в файле настроек. Например, вы можете использовать метод putString() , чтобы поместить пару ключ-значение со значением типа String . Аналогично, вы можете использовать метод putFloat() , чтобы поместить пару ключ-значение, чьё значение типа float . Следующий пример кода создаёт три пары ключ-значение:

После того, как вы добавили все пары, вы должны вызвать метод commit() объекта SharedPreferences.Editor , чтобы сохранить их.

Чтение из объекта SharedPreferences гораздо проще. Всё, что вам нужно сделать, так это вызвать соответствующий метод get*() . Например, чтобы получить пару ключ-значение, чьё значение является String , вы должны вызывать метод getString() . Вот фрагмент кода, который извлекает все значения, которые мы добавили ранее:

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

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

2. Использование базы данных SQLite

Каждое приложение для Android может создавать и использовать базы данных SQLite для хранения больших объемов структурированных данных. Как вы уже знаете, SQLite не только лёгкая, но и очень быстрая. Если у вас есть опыт работы с системами управления реляционными базами данных и вы знакомы как с SQL, что является сокращением для Structured Query Language, и JDBC, что является сокращением для Java Database Connectivity, это может быть предпочтительным вариантом хранения.

Чтобы создать новую базу данных SQLite или открыть уже существующую, вы можете использовать метод openOrCreateDatabase() внутри своей активити или службы. В качестве аргументов вы должны передать имя своей базы данных и режим, в котором вы хотите её открыть. Наиболее часто используемый режим MODE_PRIVATE , который гарантирует, что база данных доступна только для вашего приложения. Например, вот как вы можете открыть или создать базу данных с именем my.db:

После создания базы данных вы можете использовать метод execSQL() для запуска SQL-инструкций. В следующем коде показано, как использовать оператор SQL CREATE TABLE для создания таблицы названной user, которая имеет три столбца:

Хотя можно вставить новые строки в таблицу с помощью метода execSQL() , лучше использовать метод insert() . Метод insert() ожидает объект ContentValues , содержащий значения для каждого столбца таблицы. Объект ContentValues очень похож на объект Map и содержит пары ключ-значение.

Читайте также:  Android app build xml

Вот два объекта ContentValues , которые вы можете использовать с таблицей user :

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

Когда объекты ContentValues готовы, вы можете передать их методу insert() вместе с именем таблицы.

Чтобы отправить запрос в базу данных, вы можете использовать метод rawQuery() , который возвращает объект Cursor , содержащий результаты запроса.

Объект Cursor может содержать ноль или несколько строк. Самый простой способ перебрать все его строки, так это вызвать метод moveToNext() внутри цикла while .

Чтобы получить значение отдельного столбца, вы должны использовать такие методы, как getString() и getInt() , которые ожидают индекс столбца. Например, вот как вы получите все значения, вставленные в таблице user :

После того, как вы получите все результаты вашего запроса, убедитесь, что вы вызвали метод close() для объекта Cursor , чтобы освободить все ресурсы, которые он хранит.

Аналогичным образом, когда вы закончили все операции с базой данных, не забудьте вызвать метод close() для объекта SQLiteDatabase .

3. Использование внутреннего хранилища

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

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

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

С этого момента вы можете использовать свои знания о классах и методах I/O (ввода/вывода) Java для чтения или записи в файл. В следующем фрагменте кода показано, как использовать объект FileOutputStream и метод write() для записи в файл:

4 . Использование внешнего хранилища

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

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

Как только вы убедитесь, что внешнее хранилище доступно, вы можете получить путь к файлу внешнего хранилища для своего приложения, вызвав метод getExternalFilesDir() и передав null в качестве аргумента. Затем вы можете использовать путь для ссылки на файлы внутри каталога. Например, вот как вы можете ссылаться на файл с именем bob.jpg в каталоге внешнего хранилища приложения:

Попросив пользователя предоставить вам разрешение WRITE_EXTERNAL_STORAGE , вы можете получить доступ для чтения/записи ко всей файловой системе во внешнем хранилище. Затем вы можете использовать известные общедоступные каталоги для хранения ваших фотографий, фильмов и других мультимедийных файлов. Класс Environment предлагает метод getExternalStoragePublicDirectory() для определения путей этих общих каталогов.

Например, передав этому методу значение Environment.DIRECTORY_PICTURES , вы можете определить путь к общедоступному каталогу, в котором вы можете хранить фотографии. Аналогично, если вы передадите этому методу значение Environment.DIRECTORY_MOVIES , вы получите путь к общедоступному каталогу, в котором могут быть сохранены фильмы.

Вот как вы можете ссылаться на файл bob.jpg в каталоге общих изображений:

Когда у вас есть объект File , вы можете снова использовать классы FileInputStream и FileOutputStream для чтения или записи на него.

Заключение

Теперь вы знаете, как максимально использовать возможности локального хранилища, предоставляемые Android SDK. Независимо от выбранного вами варианта хранения операции чтения/записи могут потребовать много времени, если задействованы большие объемы данных. Поэтому, чтобы убедиться, что основной поток пользовательского интерфейса всегда остается отзывчивым, вы должны рассмотреть возможность запуска операций в другом потоке.

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

Читайте также:  Android studio videoview url

Источник

Как сделать резервную копию Android перед тем, как сбросить настройки

Хотя многие из нас хранят большую часть наших личных данных в облаке в различных сервисах, таких, как Dropbox, Gmail и Google Photos, или пользуются потоковыми сервисами, некоторые персональные данные все равно будут храниться локально. Если вам надо будет сбросить настройки телефона, вы их обязательно потеряете, если не сделаете резервную копию. Резервная копия может понадобиться и в других случаях. Любой телефон может сломаться, потеряться или просто быть украденным. В этом случае спасти данные будет просто невозможно. Опять же вас спасет только резервная копия, которую можно сделать одним из способов, указанных в этой статье.

Всегда надо делать резервную копию смартфона.

Проверка статуса подключения к хранилищу

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

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

Google учит «Google Объектив» для Android решать математические задачи

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

Проверьте синхронизацию фотографий

Если вы используете Google Photos для резервного копирования фотографий и видеороликов, снятых на телефон, убедитесь, что приложение все еще работает правильно. Все, что вам нужно сделать, — это открыть приложение ”Фото” и найти вверху иконку вашей учетной записи и значок облака на ней. Если все нормально, значит синхронизация выполнена. Если облако перечеркнуто, то нет.

Если вы ранее отключили облачные резервные копии в Фото, вы можете легко включить их. Просто откройте боковое меню, нажмите ”Настройки” и выберите ”Резервное копирование и синхронизация”, чтобы включить синхронизацию. Это очень просто.

Как сделать резервную копию фотографий.

Конечно, существует множество других приложений для резервного копирования фотографий для Android, включая OneDrive, Dropbox или Яндекс.Диск. В них тоже можно включить автоматическую синхронизацию или сделать все вручную

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

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

Если вы не сможете найти в своем телефоне ”Файлы”, просто скачайте из Google Play приложение Google Files и сделайте это через него

Резервное копирование фотографий на компьютер Windows

Более простой вариант — просто подключить телефон к компьютеру и скопировать DCIM телефона или другую нужную папку. Все, что вам нужно, — это USB-кабель, который поставляется с телефоном. Убедитесь, что ваш телефон находится в режиме MTP (передача файлов) и не настроен на зарядку или другой режим USB-подключения.

Копировать фотографии с Android на Windows достаточно просто.

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

Копирование фотографий с Android на Mac

Для Mac вам понадобится загрузить отдельный инструмент для передачи файлов с Android устройств. Это приложение далеко не всегда хорошо работает, поэтому я все же рекомендую пользоваться облачными хранилищами, вроде Dropbox, или настроить FTP-сервер или общий ресурс SMB на своем телефоне с помощью такого инструмента, как AndSMB.

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

Копирование контактов и календаря в облако

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

Читайте также:  Eternal legacy android 4pda

Хранить контакты в облаке очень просто и полезно.

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

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

Как подготовить смартфон к продаже

Если вы продаете свой телефон или отдаете его кому-то другому, вам необходимо выйти из всех учетных записей Google и удалить все пароли блокировки. Android представил функцию ”Защита устройства” еще в 2015 году. Она требует, чтобы вы вводили пароль последней учетной записи Google, использованной на устройстве, после того, как устройство было стерто. Конечно, в том случае, если вы не вышли из учетной записи перед сбросом.

Куда проще сохранять все в облако и иметь всегда при себе, чем просто потерять это.

Хотя Google и заявляет, что ”Защита устройства” не должна запускать проверку пароля после сброса настроек на большинстве телефонов, удаление ваших учетных записей Google и пароля блокировки — единственный способ гарантировать, что проблем при повторной активации не будет. Через мои руки прошел не один десяток смартфонов и я насмотрелся на эти проблемы. Особенно, когда кто-то давал телефон для теста и предыдущий пользователь не сбрасывал свои данные. Или, наоборот, когда сам в запаре забывал выйти из учетки.

Еще больше полезных советов вы найдете в нашем Telegram-чате. А заодно сможете задать свои вопросы.

Чтобы отключить защиту устройства, сначала необходимо выйти из всех учетных записей Google. Откройте ”Настройки” на своем телефоне, перейдите в раздел ”Учетные записи” и нажмите ”Удалить учетную запись” под каждой учетной записью.

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

Новости, статьи и анонсы публикаций

Свободное общение и обсуждение материалов

Многие уже забыли, но пару лет назад Евросоюз наложил на Google самый большой штраф в истории современной IT-отрасли. Его размер составил 5 миллиардов долларов, а поводом для этого стало неконкурентное поведение, проявившееся в навязывании Google Play и других сервисов Google производителям Android-смартфонов. Само собой, поисковый гигант тот штраф не заплатил, решив обжаловать решение. Тяжбы длятся до сих пор, но, судя по всему, в Google поняли, что изменить что-либо уже вряд ли получится, а значит, нужно идти на крайние меры — показывать пальцем на главного конкурента.

Никто пока с уверенностью не говорит, что грядущий чипсет Google Tensor будет лучше и производительнее нынешнего флагманского Qualcomm Snapdragon 888. По большому счету, даже Exynos 2100 от Samsung может оказаться как минимум не хуже, и это абсолютно нормально. Пользователи Android могут немного расслабиться в этом плане и не переживать, что их смартфоны будут работать чуть медленнее. Куда важнее будут некоторые другие параметры этого процессора, который все равно займет свое место и позволит пользователям расслабиться и не переживать из-за меньшего количества гигагерц. Пока звучит немного путано, но давайте разбираться по порядку.

Как-то так получилось, что каждую статью о WhatsApp хочется начать с рассказа о том, как она в прошлый раз проштрафилась со своей довольно спорной политикой конфиденциальности. Вот только делать это в очередной раз большого смысла нет. Тем более, что новая функция, хоть и имеет отношение к защите ”личного пространства”, но не так явно, как новая политика, вызвавшая так много споров в начале года. Новая функция больше нацелена на защиту пользователей от других пользователей. С ней вы, например, сможете сделать так, чтобы ваш начальник, отправивший вам задание в выходной день, не мог понять, когда вы были в Сети. Это немного грубый пример, но давайте разберемся более основательно в новой функции мессенджера.

Источник

Оцените статью