![]() |
|
Модераторы: javastic, AntonSaburov |
![]()
|
|
| vito1945 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 16.7.2008 Репутация: нет Всего: нет |
Есть желание сделать приложение, но работать оно должно в фоне, как и системный будильник. Можно ли это как то реализовать?
модель SE K750 Это сообщение отредактировал(а) vito1945 - 23.9.2008, 22:42 |
|||
|
||||
| W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
правда не на всех телефонах работает. Это отправит твое приложение в бекгроунд а далее - Push Добавлено через 3 минуты вот на русском инфа есть по push регистрации, там и статическая и динамическая регистрация расписана Присоединённый файл ( Кол-во скачиваний: 35 )
Novovvedenija_v_MIDP2.rar 136,15 Kb-------------------- iOS developer |
|||
|
||||
| eugine_s |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Я бы не использовал для будильника работу в бэкграунде.
Считаю, что достаточно и Push только использовать. Пользователь запустил программу, выставил время будильника, программа выполнила PushRegistry.registerAlarm, пользователь вышел из программы. В назначенное время (назначенное PushRegistry.registerAlarm ) телефон запустил "Будильник"... Только нужно учитывать, что PushRegistry.registerAlarm регистрирует только одно время запуска, т.е. два будильника нельзя одновременно указать, но это тоже не проблема: всегда регестрировать только самый ближний Alarm, а при каких-то изменениях в будильнике (добавлен новый будильник, который должен звонить раньше текущего или какой-то будильник уже "отработал") регистрировать новый alarm Да, у K750 - можно запустить только один мидлет, поэтому я не знаю точно как будет себя вести телефон, если какой-то мидлет запущен, а у друго "прозвенел звонок на пробуждение". И еще одно: PushRegistry требует сертификата или "Ask once" можно выставить в настройках мидлета без сертификата. |
|||
|
||||
| Dummy |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
По MIDP 2.0:
Другая проблема в том, что перед тем, как прибить выполняемое в настоящий момент приложение, AMS должен в общем случае спросить у пользователя, а можно ли. И MIDP не говорит ничего конкретного по поводу того, отключается ли подобный вопрос помещением мидлета в доверенный домен.
По идее, "Ask once" - это аналог "session" в терминах MIDP 2.0 (поправьте меня, если для SonyEricsson и каких-то других аппаратов это не так). Так что AMS юзера спрашивать все равно будет, по одному раз для каждого запуска мидлета. Т. е. пришло время запуститься мидлету-будильнику, ан вот AMS не пущает - выводит окошко с вопросом. В итоге владелец телефона продрыхнет все на свете.Так что эта подпорка, видимо, для будильника не годится, в абсолютной безопасности себя можно ощущать только с подписанной версией мидлета. |
||||||
|
|||||||
| W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
никто не говорил о будильнике
-------------------- iOS developer |
|||
|
||||
| eugine_s |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
А точно - нужно раньше спать ложиться, а не форумы читать Хотя ответы на поставленный вопрос уже даны: 1. Чтобы свернуть - то что WOLF написал: Display.getDisplay(myMidlet).setCurrent(null) 2. Чтобы пробудить мидлет - PushApi У меня у самого W810 - я бы на врядли стал бы пользоваться программой, которой нужно всегда быть запущенной чтобы выполнять какие-то действия. Причины две: 1. невозможность запустить других приложений (на данной модели, как и на K750 - только один мидлет, хотя на более поздних моделях - можно больше одного запускать). 2. батарея |
|||
|
||||
| Lisus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: 1 Всего: 2 |
А если мидлет подписать? Подписанные мидлет не будет каждый раз спрашивать при подключения к сети или запуска мидлета из-за активации сети? Подпись (она же сертификат как я понимаю) - это панацея от Достающих вопросов? Если можно, дайте название марок телефонов, где это прокатывает. Плих народ. Информации от этом (Push) крайне мало. Много перерыл, но информации очень не хватает. Не понятно как это выглядит (мало примеров), не понятно как это работает (нет полноценной и подробной документации, в основном написано, что мрожно... но как? ), не понятно где это работает,(нет документации по маркам телефона, где это выполнено полностью, и где нет, и в каком виде) |
|||
|
||||
| eugine_s |
|
||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
В подписанном мидлете можно в "Разрешениях" выставить "Разрешать всегда" (т.е. запросов не будет)
Да... если же рассматривать "Достающие вопросы" как проблему. (На самом деле эти вопросы были сделаны не просто так - например, чтобы мидлет просто так не слал смс-ки на дорогие номера)
Push есть в стандарте MIDP2.0.
Может свой пример приведешь того что не получается? Два варианта как зарегестрировать Push событие: прописать в jad (MIDlet-Push-1: sms://:5000, App, * - ожидать прихода смс-ки на порту 5000, если смс-ка пришла, то номер смс-ки может быть любой (*) и после этого запустить класс App) или PushRegistry.registerConnection() - параметры такие же как и в jad-e (что слушаем, класс мидлета, фильтр). PushRegistry.unregisterConnection - удалить Push Мидлет запустился, сразу запускаешь отдельный поток, который будет прослушивать твои зарегистрированые события и получать данные из них.
FAQ Так же можно доку от Sun-а посмотреть по PushRegistry
А такой документации и не должно быть (по крайней мере от производителей телефонов так точно не должно быть). Если телефон MIDP2.0 - тогда он ОБЯЗАН поддерживать Push, и нет такого понятия для Push что какая-то модель поддерживает только часть PushApi Поэтому если заявлено что MIDP2.0 - то тогда Push есть. Другое дела как это на практике у всяких там "корейцев" получается - Samsung, LG .... Сам недавно делал: в jad-е прописано пробуждение от входящей смс-ки. SE - нормально, Nokia - нормально, Motorola - нормально. Samsung - не все нормально (какая-то проблема возникает если мидлет выключен, приходит смс-ка, мидлет включается, но текст смс-ки куда-то девается |
||||||||||||
|
|||||||||||||
| Lisus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: 1 Всего: 2 |
eugine_s
Большое тебе спасибо. Мне вот что интересует. Даю полную версию, т.е. все насучные вопросы. 1) как я понял можно зарегистрировать сервер, т.е. приконектится какой-то поток из сети (по определённому порту) и мидлет просыпается. Надо: как получить сокет этого соединения? Я так понимаю, в спящем режиме мидлета сервер всё равно работает. И его второй раз запускать не надо. Всё работает вот так: * приходит коннект на нужные порт * аппарат пробуждает (запускает) мидлет * мидлет смотрит берёт этот самый сокет.... т.е. нужен метод Socket (какой-то класс).getAriseSocket(); Проблема в том, что я не знаю как работать с тем, что живёт вне мидлета. По ходу при первом запуске мидлет создает сервер (регистрирует), делает у себя пометку, что сервер объявлен(т.е. следующий раз будет не первым), делает что-то ещё и спать ложиться(разрушается). Вроде основной каркас должен выглядеть именно так. Т.к. мидлет разружен, то теряется ссылка на ServerSocket , который всё слушает и живёт отдельно. Но чтобы считать данные нужно как-то к нему обратиться. 2) Push есть в стандарте MIDP2.0. Киньте в меня ссылкой. пока то, что я видел мой информационный аппетит не гасит. 3) Я так понимаю, что нормально тестить это дело можно только в реальных аппаратах, т.е. эмуляторы для этого очень плохо подходят. 4) как подписать мидлет? и как установить "Разрешать всегда" ? Спасибо за ответы. |
|||
|
||||
| eugine_s |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
вот
Если нормально тестить - то на аппаратах. Если для разработки, то можно и эмулятором пользоваться. У нокии последние эмуляторы нормально с этим работают (проверял на смс) Официально: Купить сертификат у Verisign (500$) или Thawte (300$) и им подписать мидлет. Не официально: у некоторых телефонов есть "свои" способы обойти сертификат - с этим вопрос в гугл. Вот пример для Нокии Установить "Разрешить всегда" - на установленном мидлете нажимаешь опции-разрешения-....выбираешь нужно разрешение-добавляешь. Это в общих чертах. |
||||
|
|||||
| Lisus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: 1 Всего: 2 |
А на 1) ответы можно?
Что считается одним мидлетом? Я про сертифицирование. А так понимаю, что одна программа - 500$. А если существует несколько версии одно и тойже программы? или разные немного программы для разных мобил? На каждую придётся по полкосаря выкидывать? |
|||
|
||||
| eugine_s |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Жизненный цикл мидлета такой: 1) Установка мидлета 2) Если в мидлете (в jad или манифесте) прописан MIDlet-Push-N: (собственно наш случай) то телефон регистрирует у себя этот мидлет для прослушивания 3) Мидлет запускается (не важно каким образом: сам или по событию) 4) Мидлет в отдельном потоке запускает сервер (или несколько сервером) по прослушиванию порта. 5) Если мидлет бы пробужден по событию прихода данных на порт который мидлет зарегистрировал, то телефон сразу же после п.4 переправляет в мидлет то что пришло (т.е. или смс-ку или сокет) 6) Мидлет читает полученные данные 7) Выход из мидлета 3-7: зацикленно 6.1) Мидлет может сам удалить прослушиваемый им порт из реестра телефона (PushRegistry.unregistre()...) После этого мидлет не будет пробуждаться от данных на этот порт 6.2) Так же мидлет может зарегистрировать еще один порт для прослушиванию (или не еще один порт, а тот который закрыл). 8) Удаление мидлета: если на нем зарегистрированы какие-то порты, эти порты удаляются из реестра телефона. Т.е. идея такая, что каждый раз регистрировать не нужно: можно один раз прописать в Jad-e перед установкой и все. Вот это вернет список всех зарегистрированных соединений: String[] connections = PushRegistry.listConnections(true); Сертификат дается на год и все равно сколько мидлетов ты им подпишешь. |
|||
|
||||
| Lisus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: 1 Всего: 2 |
А если без сертификата, то... мидлет будет выдавать 2 запроса на разрешения? один на пробуждение Мидлета, а второй на создание серверсокета? Этот момент важен. Нельзя ли сделать так, чтобы вообще никаких запросов на пробуждение-серверизацию не требовалось без сертификата? Планируется частое обращение к телефону и пользователя эти разрешения могу просто задолбать. Цель - убрать всякие разрешения. Я так понимаю что без сертификата некоторые модели будут иметь возможность настраивать разрешение один раз и на всегда. Ещё в ряде моделей есть нативные фишки как с нокиа. Для всех остальных нужен сторонний сертификат. а насчёт моего пускта 1) я так понимаю (теперь), что в п.4 телефон перенаправляет сетевой запрос, как будто этот запрос пришёл не до запуска мидлета, а после... |
|||
|
||||
| eugine_s |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Да. Два. Хотя вполне возможно, что будет еще какие-то "промежуточные" запросы в самом начале. Типа "Разрешить этому мидлету работать с PushRegistry?" Ответил - нет, тогда в дальнейшем всегда не будет запросов, мидлет всегда будет получать "нет". Если ответил "да" тогда всегда будет спрашивать у пользователя: "разрешить? да-нет" (если в настройках стоит: всегда спрашивать). Где-то так, но я на 100% не уверен. На этот вопрос Dummy наверное сможет ответить точно.
Можно. Где-то видел такое, что можно хакнуть телефон и он запросы вообще не будет выдавать (кажись для SE видел такое). Но вообще ответ - нет. Без сертификата нельзя. Да и с сертификатом, тоже нужно чтобы пользователь в настройках выставил: "не спрашивать никогда"
Нет. Один раз и на всю сессию. Сторонний сертификат.. что ты тут имеешь ввиду? Почему я указал Verisign или Thawte - так как эти сертификаты уже установлены в хранилище Java сертификатов(именно Java сертификатов) в телефоне. Да там есть еще другие сертификаты, но они не такие распространенные (т.е. может оказаться что подписанное приложение не запуститься на каком-то телефоне, так как подписано сертификатом, который не установлен в телефоне). Взять какой-то сторонний сертификат (например свой собственный - он не сложно делается) - но нужно теперь этот сертификат запихнуть в телефон (в хранилище Java сертификатов) - а это уже проблема. Большинство телефонов просто так не разрешают такое делать (например, на SE - это или перешивать телефон или еще пару "хакерских" методов - т.е. не каждый за такое возьмется) |
||||||
|
|||||||
| Lisus |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: 1 Всего: 2 |
А потом что? Пользователь опять будет вынужден всё ручками делать? можно его потом как-нибудь продлить? Почему вообще есть временные ограничения? А если надо дольше, что делать-то? Я так понимаю, что сертификат - это вещь связанная с определённым мидлетом, а не с определённым телефоном. (А то мало ли.)
Хотелось бы услышать и этого товарища. А вообще большое спасибо, за пару часов на форуме я гораздо лучше начал себе это всё представлять, чем за целый день вчерашний. |
||||
|
|||||
![]()
|
FAQ раздела лежит здесь! |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |