Intereting Posts
(Как) я могу увеличить ограничение квоты LocalStorage в Android WebView Вкладки TabLayout не заполняют весь ActionBar FindFragmentByTag () возвращает null после выполнения FragmentTransaction с использованием метода replace () Пользовательский вид с макетом Ящик навигации не закрывается Невозможно обновить build.gradle для использования библиотеки поддержки 23.0.1 Прекратить обслуживание, когда приложение закрыто Как отправить ping с помощью клиента Eclipse Paho MQTT? Исключение класса при изменении ориентации (Android) Как установить Ionic framework на Ubuntu? Как запустить активность только один раз, когда приложение открывается в первый раз? Приложение умирает с «Сигналом отправки», но никаких исключений или другой информации Как протестировать обновление базы данных sqlite перед загрузкой новой версии моего приложения в игровой магазин в Android Android, как проверить, работает ли служба намерений или перестала работать Определять действие по умолчанию (когда приложение запускается) программно

Android: передача данных между сервисом и активностью

Поэтому я очень запутался в том, как сделать все это, и я надеялся, что кто-то может немного сломать его для меня.

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

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

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

  2. Нужно ли обслуживание и деятельность в одном и том же или отдельном пакете? Я бы подумал, но нет, но почему-то я помню, что видел что-то об этом в другом месте.

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

Заранее спасибо.

Solutions Collecting From Web of "Android: передача данных между сервисом и активностью"

  1. Если классы службы и активности находятся в одном пакете, я считаю, что они должны иметь доступ к одному и тому же частному хранилищу.

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

  3. Свяжите данные с дополнительными функциями Intent как пары «ключ-значение» и начните действие.


Intent intent = new Intent(this, SecondActivity.class); Bundle b = new Bundle(); // see Bundle.putInt, etc. // Bundle.putSerializable for full Objects (careful there) b.putXXXXX("key", ITEM); intent.putExtras(b); startActivity(intent); // -- later, in Activity Bundle b = this.getIntent().getExtras(); int i = b.getInt("key"); 

В том же приложении службы и действия могут обращаться к одной базе данных Sqlite. Я бы предложил использовать sqlite db. Для простоты настройте свое сервисное соединение как локальное, так что вам не нужны интерфейсы AIDL и межпроцессные коммуникационные материалы.

Из службы, чтобы уведомить пользователя, используйте NotificationManager. Вы можете передать сериализуемый объект из своей службы в намерение, а затем в начальную работу, но я бы предложил передать идентификатор db.

Мы создали новый инструмент Android ORM, который вы можете использовать для этого. Он включает в себя прототипы Activity и Service, которые вы можете использовать для создания своего приложения. У меня пока нет приложения-примера, которое использует службу, но я буду писать следующий код и получить его как можно скорее.

Видеть…

http://ormlite.com/

И мой блог …

http://touchlabblog.tumblr.com/

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