Створення служби Android за допомогою Phonegap? (Нехай програма phonegap працює навіть у закритому режимі)


74

Я працював над додатком для Android, використовуючи Phonegap, і тепер хотів би зробити це, щоб, коли додаток закрито, він все ще міг виконувати код Java / js в додатку. Тож я розумію, що мені потрібно створити послугу. Якщо я створюю плагін служби на phonegap, чи можу я все-таки виконати код JavaScript або лише java?

Хтось робить щось подібне? Я знайшов це обговорення, але, здається, не спрацював: http://groups.google.com/group/phonegap/browse_thread/thread/722b0e796baa7fc6 Отже, це все, що я маю зараз.

Перш ніж я перейду до його розробки, якщо я не можу зрозуміти, я поцікавлюсь, чи хтось робив це раніше. Здається, я не можу знайти жодного з плагінів phonegap, який робить щось подібне.

EDIT: У мене є програма, яка виконує код Java як послугу. Однак коли він викликає sendjavascript, це не працює. Тож чи є спосіб, щоб код javascript працював у фоновому режимі, коли додаток закрито за допомогою phonegap?

Дякую


Який код потрібно запускати у фоновому режимі?
Coder_sLaY

Я хочу мати можливість, щоб javascript все ще працював у фоновому режимі. Так що навіть якщо додаток закрито, JavaScript все одно виконується.
Йоновоно,

Відповіді:


56

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

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

Ви можете мати деяку фонову активність у вашому коді JS всередині вашої дочірньої діяльності, що походить від діяльності DroidGap. Наприклад, у вашій діяльності є фоновий потік, функція зворотного виклику JS і дозвольте потоку викликати цю функцію зворотного виклику.

Якщо вам дійсно потрібна послуга, вам доведеться перейти на рідну мову.

Оновлення:
код JS можна виконати лише за допомогою дії Droidgap. Діяльність може мати 3 стани (на основі Життєвого циклу діяльності ):

  1. видно
  2. невидимий, але все ще завантажений
  3. не завантажено

Я надав зразок, в якому я застосував плагін Phonegap. Плагін дозволяє активності зареєструватися в SMS_RECEIVED. Коли активність виходить за межі обсягу (подія при попередньому завантаженні), вона реєструється, тому обробляється лише випуск 1.

Коли ви хочете, щоб були оброблені всі 3 проблеми, вам потрібно переслати намір вхідного SMS до діяльності. Коли він не завантажується, система автоматично завантажується та активує діяльність. Але це вже не фонова послуга, ваш додаток стане видимим кожного разу, коли отримаєте SMS.

Якщо ви цього не хочете (якщо ви справді хочете фонову послугу), вам слід надати власну реалізацію.


3
Дякую. Отже, якщо я розумію, я можу створити службу, яка викликає зворотний дзвінок JavaScript? Наприклад, я міг би мати службу в коді Java, яка, отримуючи текстове повідомлення, викликає функцію зворотного виклику javascript для виконання якогось коду JS? Це було б ідеально. Я знайшов цей плагін, який, схоже, створює службу і викликає код Js: github.com/awysocki/C2DM-PhoneGap
Jonovono,

Чудово це виглядає непогано. Дякую! Отже, якщо я натискаю кнопку "Назад" під час запуску програми, вона все одно повинна писати на консоль, коли отримує вхідний текст? Здається, ні?
Йоновоно,

1
Ні, тому що я скасовую реєстрацію, коли діяльність закрита. За вашими вимогами ми повинні активувати активність за наміром, і нам не потрібен плагін. Але я не можу надати зразок протягом наступних двох днів.
ChrLipp

Хм, добре, дякую. Тож не повинно бути так важко? Здається, це чудово працює, мені просто потрібно, щоб він також виконував js-код.
Йоновоно,

1
Схоже, ваше посилання на github в "Оновлення 2" застаріло.
Mike N

9

Існує ця стаття про те, як створити службу на Android за допомогою Phonegap, яка надає хорошу інформацію про вашу проблему.

Він використовує чудовий плагін, щоб легко створити фонову службу з фонегапом. Але ви не можете використовувати JS

Я не знайшов способу змусити JS працювати у фоновому режимі. АЛЕ ви можете передавати параметри з Java в JS і навпаки за допомогою плагіна ... що досить корисно. Вам все одно доведеться переписати свій код JS на Java. Якщо у вас немає конкретної причини хотіти лише запуску JS? (Але не повинно бути ...)

Сподіваюся, це може бути корисним для деяких людей, які відвідують цю сторінку.


Будь ласка, повторно розмістіть URL-адресу
SMKS

будь ласка, перепублікуйте адресу
Алі Хайдер

1
Можливо, застарілий, але я хотів прочитати статтю. Це на archive.org: web.archive.org/web/20130820140521/http://…
Джейсон

4

ТАК, і це дуже просто ... просто встановіть плагін backgroundJS:

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

Це дозволяє запускати javascript у фоновому режимі та в поєднанні з локальним плагіном сповіщень, ви навіть можете надсилати сповіщення користувачеві в будь-який час, лише майте на увазі, що це призведе до того, що акумулятор розрядиться швидше, також враховуйте, що створити проблему з політикою iOS. Щасти!!!


1
На жаль, там написано "Платформа (и): iOS", тому для Android це не буде працювати :(
s.krueger

1
вищевказаний плагін не працює нескінченно в моєму випадку, приблизно через 3 хвилини фонові функції зупиняються. Я намагався встановити SetBackgroundSecondsметод приблизно на 300 секунд, але теж не працював, консоль припинила реєстрацію приблизно на 180 секунд.
Хуан Карлос Альпізар Шиншила

@Juan Carlos ... для мене це працює близько 6 годин, потім псується, важливо, щоб у вашому додатку працювали дії ... Я думаю, це робить трюк
Мішель Тобон,

@MichelTobon, що ви маєте на увазі під діяльністю? У мене є інтервал js, що працює X хвилин, залежно від вибору користувача в налаштуваннях, однак час його тривалості є випадковим між 3-10 хв після подальшого тестування. Можливо, я роблю щось не так, ви можете поділитися jsfiddle, суттю або подібним посиланням щодо реалізації?
Хуан Карлос Альпізар Шиншила

1
@JuanCarlosAlpizarChinchilla це скрипка, це дуже просто jsfiddle.net/EJE4R/6
Мішель Тобон

2

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.