Android installLocation и BOOT_COMPLETED

У меня есть приложение для Android, которое использует AlarmService. Согласно документам, я не должен разрешать установку/перемещение этого приложения на внешнее хранилище. Однако пользователи этого не понимают (возможно, из-за очень небольшого внутреннего хранилища на некоторых устройствах) - и требуют установки для установки на внешнем хранилище (через рейтинги с низким рейтингом).

Мне нужно перерегистрировать аварийные сигналы при загрузке и прослушать BroadcastReceiver для BOOT_COMPLETED. Это, однако, не требуется для приложений, установленных на SD-карте, так как это еще не установлено, тогда умышленное увольнение. EXTERNAL_APPLICATIONS_AVAILABLE, к сожалению, также нет - поэтому я не получаю уведомления о том, что мы загрузились и, следовательно, не имеем никаких изменений, чтобы повторно установить аварийные сигналы.

Есть ли какой-нибудь путь вокруг этого затруднительного положения?

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

Объясните своим пользователям, если они просят вещи, которые не имеют смысла или технически неосуществимы на платформе, для которой вы разрабатываете: если они продолжают спрашивать, я бы сказал, что просто игнорируйте их. Ваш звездный рейтинг будет хитом, но мучительным, что не решит проблему.

Ответ 4

У вас уже есть несколько замечательных ответов на вопрос - это разъяснение, исправление или иное обращение к точкам, которые вы раскрываете в своих комментариях.

пользователи хотят этого, если приложение составляет всего несколько МБ

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

Теперь я с готовностью соглашусь с тем, что Android Market должен предоставлять дополнительную помощь в этом канале связи (например, ответы на комментарии).

Придумывание длинных технических объяснений (== оправдания) - это просто не правильный ответ

Вы, безусловно, приветствуете свое мнение. Надеюсь, вам понравится розовый.

Что они думали, проектируя аварийную службу, которая работает только до следующей перезагрузки?

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

Хорошо - даже "мощный" телефон, такой как HTC Desire, поставляется только с 150 МБ пользовательского пространства (en.wikipedia.org/wiki/HTC_Desire). Это жалкое.

Не стесняйтесь брать это с HTC. Я не верю, что они регулярно читают StackOverflow.

Решение Android для установки приложений здесь в лучшем случае несерьезное

Нет, это в основном ограничено природой USB Mass Storage Mode, между прочим. Долгосрочным решением является устранение разделения между внутренним и внешним хранилищем, процесс, который уже выполняется в Honeycomb.

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

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

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

В основном это касается игр, основной категории приложений, которые имеют существенные потребности в хранении. Они также, как правило, не нуждаются в функциях, для которых приложения на внешнем хранилище не работают особенно хорошо.