Вопрос по mobile, android – Создание службы Android с PhoneGap? (Приложение PhoneGap запускается даже в закрытом состоянии)

71

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

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

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

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

Благодарност

Какой код ты хочешь использовать в фоновом режиме? Coder_sLaY
Я хочу, чтобы JavaScript работал в фоновом режиме. Таким образом, даже если приложение закрыто, JavaScript все равно выполняется. Jonovono

Ваш Ответ

4   ответа
56

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

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

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

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

Обновить
од @JS может выполняться только с действием Droidgap. Деятельность может иметь 3 состояния (на основе Жизненный цикл мероприятий):

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

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

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

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

Да, это будет работать! Я предоставил образец на Githu ChrLipp
Благодарность. Так что, если я понимаю, я мог бы создать службу, которая вызывает обратный вызов JavaScript? Например, у меня может быть служба в коде Java, которая при получении текстового сообщения вызывает функцию обратного вызова javascript для выполнения некоторого кода JS? Это было бы замечательно. Я нашел этот плагин, который, кажется, создает сервис и вызывает код Js: Github.com / awysocki / C2DM-PhoneGap Jonovono
Отлично, это выглядит хорошо. Благодарность! Так что, если я нажимаю кнопку «Назад» во время работы приложения, оно все равно должно писать в консоль, когда оно получает входящий текст? Кажется, что нет? Jonovono
Нет, потому что я отменяю регистрацию, когда действие закрыто. По вашему требованию мы должны пробуждать активность по назначению, и нам не нужен плагин. Но я не могу предоставить образец в ближайшие два дня. ChrLipp
Похоже, ваша ссылка на github в "Обновлении 2" устарела. Mike N
4

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

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

К сожалению, там написано "Платформа (ы): iOS", поэтому она не будет работать для Android: s.krueger
вышеупомянутый плагин не работает бесконечно в моем случае, около 3 минут, фоновые функции прекращаются. Я пытался установитьSetBackgroundSeconds метод около 300 секунд, но тоже не сработал, консоль перестала регистрировать около 180 секунд. Juan Carlos Alpizar Chinchilla
@ Хуан Карлос ... для меня это работает около 6 часов, потом все портится, очень важно, чтобы у вас были действия, работающие в вашем приложении ... Я думаю, что сработает Michel Tobon
@ MichelTobon что вы подразумеваете под деятельностью? У меня есть js-интервал, запускающий X количество минут в зависимости от выбора пользователя в настройках, однако время, которое оно длится живым, является случайным через 3-10 минут после дальнейшего тестирования. Может быть, я делаю что-то не так, вы можете поделиться ссылкой на реализацию jsfiddle, gist или подобно Juan Carlos Alpizar Chinchilla
@ JuanCarlosAlpizarChinchilla это скрипка, это действительно просто Jsfiddle.net / EJE4R / 6 Michel Tobon
8

Эта стать о том, как создать на Android сервис с PhoneGap, который дает хорошую информацию о вашей проблеме.

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

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

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

Пожалуйста, перепечатайте URL SMKS
пожалуйста, перепишите URL Ali Hayder
url сейчас не работает pleshy
Может быть устарела, но я хотела прочитать статью. Он находится на archive.org: Web.archive.org / веб / 20130820140521 / HTTP: // ... Jason
2

Плагин Cordova-плагин-фон-режим

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

Похожие вопросы