Главная » Программирование игр под Android » Доступ к внешнему хранилищу – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

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

Android предлагает различные способы для реализации этого; вы можете использовать общие настройки приложения, маленькую базу данных SQLite и т. д. У всех этих возможностей есть общая черта – они не обрабатывают большие двоичные файлы. Для чего нам это может понадобиться? Хотя мы можем указать системе, чтобы она устанавливала приложение во внешнее хранилище (и таким образом не тратить память внутреннего хранилища), это будет работать только в версиях Android начиная с 2.2. В более старых версиях ОС все данные приложения будут храниться во внутренней памяти устройства. Теоретически мы могли бы включить код нашего приложения в АРК-файл и загружать все ресурсы с сервера на карту памяти SD при первом запуске программы. Многие известные игры для Android так и делают.

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

Первое, что нам необходимо сделать, – запросить разрешение на доступ к внешнему хранилищу. Это делается в файле манифеста с помощью уже рассмотренного нами элемента <user-permission>.

Далее нужно проверить, доступно ли нам в данный момент внешнее хранилище. Например, при работе с AVD у вас есть возможность обойтись без эмулирования наличия карты памяти – тогда приложение ничего не сможет туда записывать. Другая причина не получать доступ к SD-карте – его занятость другим процессом (например, просмотра его пользователем через USB). Вот так мы проверяем состояние карты памяти;

В результате мы получаем строку. Класс Environment определяет набор констант, одна из которых называется Environment. MEDI AMOUNTED (ее значение – тоже строка). Если вышеуказанный метод возвращает именно эту константу, это значит, что мы имеем полный доступ (чтение и запись) к внешнему хранилищу. Обратите внимание – на самом деле вам необходимо использовать метод equals для сравнения двух строк; оператор равенства в таких случаях не всегда дает верные результаты.

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

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

Листинг 4.8. Активность ExternalStorageTest package com.bad.ogi с.androi dgames;

Сначала мы проверяем физическую доступность SD-карты (если проверка не удалась, на этом все и заканчивается). Далее получаем корневой каталог хранилища и создаем новый экземпляр объекта File, указывающий на файл, который мы создадим в следующем выражении. Метод writeTextFi 1е использует стандартные Java-классы ввода-вывода для реализации наших целей. Если файл еще не существует, метод создаст его; в ином случае он перепишет существующий. После успешной записи текста в файл на карте мы вновь его считываем оттуда и устанавливаем в качестве содержимого TextVi ew. Финальный шаг – удаление файла из внешнего хранилища. Все действия совершаются с соблюдением необходимых мер предосторожности, благодаря которым сообщения о проблемах также выводятся в TextView. Рисунок 4.11 демонстрирует вывод активности.

Из этого урока необходимо извлечь следующие моменты.

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

Всегда проверяйте доступность внешнего хранилища.

Не связывайтесь со служебными файлами во внешнем хранилище. Я серьезно.

Рис. 4.11. Послание от веселого Роджера

Увидев, как легко удалить все файлы из внешнего хранилища, вы должны подумать дважды, создавая и размещая на Android Market приложение, запрашивающее доступ к карте SD, – ведь после инсталляции оно будет иметь полный доступ ко всем файлам.

Обработка звука

Android предлагает простые в применении API для воспроизведения звуковых эффектов и музыкальных файлов – как раз то, что нам нужно для написания игры. Рассмотрим их.

Источник: Mario Zechner / Марио Цехнер, «Программирование игр под Android», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»

По теме:

  • Комментарии