Android - темы приложений (изображения, звуки и т. Д.) Для приложения - PullRequest
2 голосов
/ 10 сентября 2011

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

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

  • Могут ли эти изображения динамически помещаться в исходную / ресурсную папку исходного приложения?
  • Как получить доступ к этим новым изображениям?Будет ли R.drawable работать?
  • Если я храню информацию с использованием SQLite, следует ли мне сохранять фактическое изображение или имя изображения или идентификатор R.drawable?

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

Спасибо.

1 Ответ

3 голосов
/ 10 сентября 2011

Прежде чем я приступлю к реализации, позвольте мне сначала ответить на ваши вопросы:)

1) Нет.Вы не можете изменять содержимое файла .apk после его создания.Это связано с тем, что приложение имеет цифровую подпись, чтобы вредоносный код не мог помечать себя внутри приложения.2) Так что из-за этого у вас есть два варианта для хранения любых пользовательских аддонов.1) Внешнее хранилище (т. Е. SD-карта пользователя) или внутреннее хранилище (т. Е. Память телефона) Каждому приложению дается как минимум две папки, которые я знаю, в памяти телефона, одна для баз данных (поэтому вы можете изменить sqlliteбазы данных), а другой для общих файлов.Поскольку эти файлы не «известны» во время компиляции, вы не можете получить к ним доступ с помощью R.drawable.3) Что ж, учитывая приведенную выше информацию, я думаю, что вам, вероятно, понадобится имя изображения внутри таблицы:)

Итак, теперь давайте немного уточним.Я просто собираюсь высказать некоторые грубые идеи о том, как я буду реализовывать этот проект.Не стесняйтесь адаптировать его к вашим потребностям, конечно.

Для начала, я бы принял решение о том, где найти аддоны.У каждого местоположения есть взлеты и падения.Если дополнения хранятся в локальной памяти, все ваши темы будут доступны независимо от того, есть ли у пользователя SD-карта. Но с другой стороны, многие пользователи, похоже, жалуются на приложения, которые занимают много места в памяти телефона, даже еслииногда они - те, кто загрузил тонны дополнительного.При использовании SD-карты вы, вероятно, должны хранить ссылку на тему по умолчанию или базовые дополнения в памяти телефона, чтобы, по крайней мере, ЧТО-ТО там было, если их SD-карта не смонтирована или нет.Прежде чем пытаться что-либо оттуда загрузить, убедитесь, что вы проверили наличие SD-карты.Преимущество размещения на SD-карте заключается в том, что пользователи могут легко загружать дополнения прямо со своего компьютера и помещать их непосредственно в папку приложения.Я лично рекомендовал бы этот способ, но убедитесь, что ваш файл Android Manifest включает это разрешение или иначе!:)

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

Итак, еще одна вещь, которую нужно рассмотреть, это как ссылаться на каждую тему.Во-первых, кто будет делать эти дополнения?Будет ли кто-нибудь, кто заинтересован в создании плагина, иметь доступ к шаблону для этого?Если вы хотите, чтобы аддонная система была более общедоступной, то вам, вероятно, понадобится почувствовать тип структуры каталогов в вашем хранилище

-themes
|
---MyTheme
|
-----icon.jpg
-----blah.mp3
----- ... and so forth

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

Я на самом деле немного устал сейчас, потому чтоэто действительно поздно ночью, но вот некоторые хорошие чтения, чтобы помочь направить вас в правильном направлении в этом вопросе.

http://developer.android.com/guide/topics/data/data-storage.html

http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device

http://www.jondev.net/articles/Unzipping_Files_with_Android_%28Programmatically%29

И еще одно быстрое замечание, ContentProvider используется для передачи данных между приложениями и действительно неэффективно для постоянного хранения данных.;)

...