Перезапустить службу для приложения на SD-карте при перезагрузке SD-карты

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

Это все в порядке, если я могу перезапустить службу при первой доступной возможности. К сожалению, несмотря на install-location, утверждая, что я могу использовать трансляцию Inta ACTION_EXTERNAL_APPLICATIONS_AVAILABLE, чтобы обнаружить, когда SD-карта повторно монтируется локально, документация для этого самого флага, это обсуждение в группе новостей и мое собственное тестирование показывают, что эта передача не доставляется в приложения, которые становятся доступными. Только приложения, которые не были перенесены на SD-карту, получают трансляцию.

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

Ответ 1

Не надежно. Вы можете подключиться к широковещательной передаче без разрешения Intents (например, ACTION_SCREEN_OFF), которая должна срабатывать в конечном итоге и получить контроль таким образом. Как указывает г-жа Хэкборн, правильный ответ на ACTION_EXTERNAL_APPLICATIONS_AVAILABLE должен быть исправлен. Вы также можете увидеть, произойдет ли какое-либо вещание, связанное с картой SD, после того, как доступны внешние приложения (например, ACTION_MEDIA_MOUNTED), хотя я ожидал, что все из них будут переданы до того, как будет доступно внешнее приложение.