Создание Android-сервиса с помощью Phonegap? (У вас есть приложение для телефонного звонка, даже если оно закрыто)

Я работаю над Android-приложением, используя Phonegap, и теперь хотел бы сделать это, когда приложение будет закрыто, он все равно может выполнить код java/js в приложении. Поэтому я понимаю, что мне нужно создать сервис. Если я создаю сервисный плагин на телефоне, я могу выполнить код javascript или только java?

Кто-нибудь делает что-то подобное? Я нашел это обсуждение, но, похоже, не работал: http://groups.google.com/group/phonegap/browse_thread/thread/722b0e796baa7fc6 Так что это все, что у меня есть прямо сейчас.

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

EDIT: У меня есть приложение, которое выполняет Java-код как службу. Однако, когда он вызывает sendjavascript, он не работает. Итак, есть ли способ, чтобы javascript-код работал в фоновом режиме, когда приложение закрыто с помощью телефонного разговора?

Спасибо

Ответ 1

Нет, невозможно запустить код Javascript в фоновом режиме (по крайней мере, на мой взгляд) как услугу. Phonegap на Android использует специальный вид деятельности Droidgap, на котором размещен WebView. Этот элемент управления браузером выполняет JavaScript. Это означает, что выполнение JS может обрабатываться только внутри этого действия, независимо от того, является ли оно видимым или нет.

Код, связанный с группами Google, пытается связать службу, разработанную на Java, с активностью DroidGap, поэтому служба НЕ написана в JS.

В вашем JS-коде внутри вашей дочерней активности вы можете получить некоторую фоновую активность, связанную с активностью DroidGap. Например, у вас есть фоновый поток в вашей деятельности, есть функция обратного вызова JS, и пусть поток вызывает эту функцию обратного вызова.

Если вам действительно нужна услуга, вам нужно пойти на родной язык.

Update:
Код JS может выполняться только с помощью операции Droidgap. Активность может иметь 3 состояния (на основе жизненного цикла действий):

  • видимый
  • невидимый, но все еще загруженный
  • не загружен

Я представил образец , в котором я реализовал плагин Phonegap. Плагин позволяет активности регистрироваться на SMS_RECEIVED. Когда активность выходит за пределы области (событие onbeforeunload), она отменяет регистрацию, поэтому обрабатывается только проблема 1.

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

Если вы этого не хотите (если вы действительно хотите использовать фоновый сервис), вы должны предоставить собственную реализацию.

Ответ 2

Существует в этой статье о том, как создать службу на Android с помощью Phonegap, которая дает некоторую хорошую информацию о вашей проблеме.

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

Я не нашел способ заставить JS работать в фоновом режиме. НО вы можете передавать параметры с Java на JS и наоборот с помощью плагина... что очень полезно. Вам все равно придется переписывать свой JS-код на Java. Если у вас нет конкретной причины, чтобы только JS запускался? (Но не должно быть...)

Надеюсь, что это может быть полезно для некоторых людей, посещающих эту страницу.

Ответ 3

ДА, и это очень просто... просто установите плагин backgroundJS:

https://build.phonegap.com/plugins/430

Он позволяет запускать javascript на фоне и в сочетании с локальным плагином уведомлений, вы даже можете отправлять уведомления пользователю в любое время, просто имейте в виду, что это приведет к тому, что батарея разрядится быстрее, также рассмотрите что это может создать проблему с политикой iOS. удачи!!!

Ответ 4

Вы можете попробовать добавить плагин cordova-plugin-background-mode

Но как автор говорит:
Бесконечные фоновые задачи официально не поддерживаются большинством мобильных операционных систем и, следовательно, не соответствуют публичным магазинам. Успешное подчинение не гарантируется. Используйте плагин на свой страх и риск!