Модераторы: javastic, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> j2me приложение "Будильник", можно ли сделать его системным? 
:(
    Опции темы
vito1945
Дата 23.9.2008, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 16.7.2008

Репутация: нет
Всего: нет



Есть желание сделать приложение, но работать оно должно в фоне, как и системный будильник. Можно ли это как то реализовать?
модель SE K750

Это сообщение отредактировал(а) vito1945 - 23.9.2008, 22:42
PM MAIL   Вверх
W0LF
Дата 23.9.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Код

Display.getDisplay(myMidlet).setCurrent(null)

правда не на всех телефонах работает. Это отправит твое приложение в бекгроунд

а далее - 
Push

Добавлено через 3 минуты
вот на русском инфа есть по push регистрации, там и статическая и динамическая регистрация расписана

Присоединённый файл ( Кол-во скачиваний: 35 )
Присоединённый файл  Novovvedenija_v_MIDP2.rar 136,15 Kb


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
eugine_s
Дата 23.9.2008, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



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

Считаю, что достаточно и Push только использовать.

Пользователь запустил программу, выставил время будильника, программа выполнила PushRegistry.registerAlarm, пользователь вышел из программы.

В назначенное время (назначенное PushRegistry.registerAlarm ) телефон запустил "Будильник"... 

Только нужно учитывать, что PushRegistry.registerAlarm регистрирует только одно время запуска, т.е. два будильника нельзя одновременно указать, но это тоже не проблема: всегда регестрировать только самый ближний Alarm, а при каких-то изменениях в будильнике (добавлен новый будильник, который должен звонить раньше текущего или какой-то будильник уже "отработал") регистрировать новый alarm 

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

И еще одно: PushRegistry требует сертификата или "Ask once" можно выставить в настройках мидлета без сертификата.

PM MAIL   Вверх
Dummy
Дата 24.9.2008, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 7
Всего: 19



Цитата(eugine_s @  23.9.2008,  23:50 Найти цитируемый пост)
поэтому я не знаю точно как будет себя вести телефон, если какой-то мидлет запущен, а у друго "прозвенел звонок на пробуждение".

По MIDP 2.0:
Цитата

The AMS is responsible for the shutdown of any running applications (if necessary) prior to the invocation of the push MIDlet method. 

Другая проблема в том, что перед тем, как прибить выполняемое в настоящий момент приложение, AMS должен в общем случае спросить у пользователя, а можно ли. И MIDP не говорит ничего конкретного по поводу того, отключается ли подобный вопрос помещением мидлета в доверенный домен.

Цитата(eugine_s @  23.9.2008,  23:50 Найти цитируемый пост)

И еще одно: PushRegistry требует сертификата или "Ask once" можно выставить в настройках мидлета без сертификата.

По идее, "Ask once" - это аналог "session" в терминах MIDP 2.0 (поправьте меня, если для SonyEricsson и каких-то других аппаратов это не так). Так что AMS юзера спрашивать все равно будет, по одному раз для каждого запуска мидлета. Т. е. пришло время запуститься мидлету-будильнику, ан вот AMS не пущает - выводит окошко с вопросом. В итоге владелец телефона продрыхнет все на свете.Так что эта подпорка, видимо, для будильника не годится, в абсолютной безопасности себя можно ощущать только с подписанной версией мидлета.
PM MAIL   Вверх
W0LF
Дата 24.9.2008, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



никто не говорил о будильнике smile будильник был для примера


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
eugine_s
Дата 24.9.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(W0LF @  24.9.2008,  01:50 Найти цитируемый пост)
никто не говорил о будильнике smile будильник был для примера 


А точно - нужно раньше спать ложиться, а не форумы читать smile

Хотя ответы на поставленный вопрос уже даны:

1. Чтобы свернуть - то что WOLF написал:
Display.getDisplay(myMidlet).setCurrent(null)

2. Чтобы пробудить мидлет - PushApi

У меня у самого W810 - я бы на врядли стал бы пользоваться программой, которой нужно всегда быть запущенной чтобы выполнять какие-то действия. Причины две: 
1. невозможность запустить других приложений (на данной модели, как и на K750 - только один мидлет, хотя на более поздних моделях - можно больше одного запускать). 
2. батарея 

PM MAIL   Вверх
Lisus
Дата 28.9.2008, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 21.10.2007

Репутация: 1
Всего: 2



Цитата(Dummy @  24.9.2008,  00:57 Найти цитируемый пост)
В итоге владелец телефона продрыхнет все на свете.Так что эта подпорка, видимо, для будильника не годится, в абсолютной безопасности себя можно ощущать только с подписанной версией мидлета. 


А если мидлет подписать?
Подписанные мидлет не будет каждый раз спрашивать при подключения к сети или запуска мидлета из-за активации сети?

Подпись (она же сертификат как я понимаю) - это панацея от Достающих вопросов?

Если можно, дайте название марок телефонов, где это прокатывает. Плих народ.
Информации от этом (Push) крайне мало. Много перерыл, но информации очень не хватает.

Не понятно как это выглядит  (мало примеров),
не понятно как это работает (нет полноценной и подробной документации, в основном написано, что мрожно... но как? ),
не понятно где это работает,(нет документации по маркам телефона, где это выполнено полностью, и где нет, и в каком виде)
PM MAIL   Вверх
eugine_s
Дата 28.9.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(Lisus @  28.9.2008,  10:13 Найти цитируемый пост)

А если мидлет подписать?
Подписанные мидлет не будет каждый раз спрашивать при подключения к сети или запуска мидлета из-за активации сети?


В подписанном мидлете можно в "Разрешениях" выставить "Разрешать всегда" (т.е. запросов не будет)


Цитата(Lisus @  28.9.2008,  10:13 Найти цитируемый пост)
Подпись (она же сертификат как я понимаю) - это панацея от Достающих вопросов?


Да... если же рассматривать "Достающие вопросы" как проблему.
(На самом деле эти вопросы были сделаны не просто так - например, чтобы мидлет просто так не слал смс-ки на дорогие номера)


Цитата(Lisus @  28.9.2008,  10:13 Найти цитируемый пост)

Если можно, дайте название марок телефонов, где это прокатывает. Плих народ.


Push есть в стандарте MIDP2.0.


Цитата(Lisus @  28.9.2008,  10:13 Найти цитируемый пост)
Информации от этом (Push) крайне мало. Много перерыл, но информации очень не хватает.


Может свой пример приведешь того что не получается? 

Цитата(Lisus @  28.9.2008,  10:13 Найти цитируемый пост)
Не понятно как это выглядит  (мало примеров),


Два варианта как зарегестрировать Push событие: прописать в jad (MIDlet-Push-1: sms://:5000, App, *  - ожидать прихода смс-ки на порту 5000, если смс-ка пришла, то номер смс-ки может быть любой (*) и после этого запустить класс App) или PushRegistry.registerConnection() - параметры такие же как и в jad-e (что слушаем, класс мидлета, фильтр).

PushRegistry.unregisterConnection - удалить Push

Мидлет запустился, сразу запускаешь отдельный поток, который будет прослушивать твои зарегистрированые события и получать данные из них.

Цитата(Lisus @  28.9.2008,  10:13 Найти цитируемый пост)
не понятно как это работает (нет полноценной и подробной документации, в основном написано, что мрожно... но как? ),


FAQ
Так же можно доку от Sun-а посмотреть по PushRegistry


Цитата(Lisus @  28.9.2008,  10:13 Найти цитируемый пост)
не понятно где это работает,(нет документации по маркам телефона, где это выполнено полностью, и где нет, и в каком виде) 


А такой документации и не должно быть (по крайней мере от производителей телефонов так точно не должно быть).
Если телефон MIDP2.0 - тогда он ОБЯЗАН поддерживать Push, и нет такого понятия для Push что какая-то модель поддерживает только часть PushApi
Поэтому если заявлено что MIDP2.0 - то тогда Push есть.
Другое дела как это на практике у всяких там "корейцев" получается - Samsung, LG ....

Сам недавно делал: в jad-е прописано пробуждение от входящей смс-ки. SE - нормально, Nokia - нормально, Motorola - нормально. Samsung - не все нормально (какая-то проблема возникает если мидлет выключен, приходит смс-ка, мидлет включается, но текст смс-ки куда-то девается smile - еще буду разбираться с этим).


PM MAIL   Вверх
Lisus
Дата 28.9.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 21.10.2007

Репутация: 1
Всего: 2



eugine_s
Большое тебе спасибо.

Мне вот что интересует.
Даю полную версию, т.е. все насучные вопросы.

1) как я понял можно зарегистрировать сервер, т.е. приконектится какой-то поток из сети (по определённому порту) и мидлет просыпается.
Надо:
как получить сокет этого соединения?
Я так понимаю, в спящем режиме мидлета сервер всё равно работает. И его второй раз запускать не надо. Всё работает вот так:
 * приходит коннект на нужные порт
 * аппарат пробуждает (запускает) мидлет
 * мидлет смотрит берёт этот самый сокет.... 
т.е. нужен метод    Socket   (какой-то класс).getAriseSocket();

Проблема в том, что я не знаю как работать с тем, что живёт вне мидлета. По ходу при первом запуске мидлет создает сервер (регистрирует), делает у себя пометку, что сервер объявлен(т.е. следующий раз будет не первым), делает что-то ещё и спать ложиться(разрушается). Вроде основной каркас должен выглядеть именно так. Т.к. мидлет разружен, то теряется ссылка на ServerSocket , который всё слушает и живёт отдельно. Но чтобы считать данные нужно как-то к нему обратиться.

2) Push есть в стандарте MIDP2.0.
Киньте в меня ссылкой. пока то, что я видел мой информационный аппетит не гасит.

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

4) как подписать мидлет? и как установить "Разрешать всегда" ?

Спасибо за ответы.
PM MAIL   Вверх
eugine_s
Дата 28.9.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(Lisus @  28.9.2008,  11:53 Найти цитируемый пост)
2) Push есть в стандарте MIDP2.0.
Киньте в меня ссылкой. пока то, что я видел мой информационный аппетит не гасит.


вот

Цитата(Lisus @  28.9.2008,  11:53 Найти цитируемый пост)
3) Я так понимаю, что нормально тестить это дело можно только в реальных аппаратах, т.е. эмуляторы для этого очень плохо подходят.


Если нормально тестить - то на аппаратах. Если для разработки, то можно и эмулятором пользоваться. У нокии последние эмуляторы нормально с этим работают (проверял на смс)

Цитата(Lisus @  28.9.2008,  11:53 Найти цитируемый пост)
4) как подписать мидлет? и как установить "Разрешать всегда" ?


Официально: 
Купить сертификат у Verisign (500$) или Thawte (300$) и им подписать мидлет.

Не официально: 
у некоторых телефонов есть "свои" способы обойти сертификат - с этим вопрос в гугл.
Вот пример  для Нокии

Установить "Разрешить всегда" - на установленном мидлете нажимаешь опции-разрешения-....выбираешь нужно разрешение-добавляешь.

Это в общих чертах.
PM MAIL   Вверх
Lisus
Дата 28.9.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 21.10.2007

Репутация: 1
Всего: 2



А на 1) ответы можно?

Что считается одним мидлетом? Я про сертифицирование.
А так понимаю, что одна программа - 500$.
А если существует несколько версии одно и тойже программы? или разные немного программы для разных мобил?
На каждую придётся по полкосаря выкидывать?
PM MAIL   Вверх
eugine_s
Дата 28.9.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(Lisus @  28.9.2008,  13:28 Найти цитируемый пост)
А на 1) ответы можно?


Жизненный цикл мидлета такой: 

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 @  28.9.2008,  13:28 Найти цитируемый пост)
Что считается одним мидлетом? Я про сертифицирование.
А так понимаю, что одна программа - 500$.
А если существует несколько версии одно и тойже программы? или разные немного программы для разных мобил?
На каждую придётся по полкосаря выкидывать? 


Сертификат дается на год и все равно сколько мидлетов ты им подпишешь.

PM MAIL   Вверх
Lisus
Дата 28.9.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 21.10.2007

Репутация: 1
Всего: 2



Цитата(eugine_s @  28.9.2008,  13:47 Найти цитируемый пост)
Жизненный цикл мидлета такой: 

1) Установка мидлета
2) Если в мидлете (в jad или манифесте) прописан MIDlet-Push-N: (собственно наш случай) то телефон регистрирует у себя этот мидлет для прослушивания
3) Мидлет запускается (не важно каким образом: сам или по событию)
4) Мидлет в отдельном потоке запускает сервер (или несколько сервером) по прослушиванию порта.
5) Если мидлет бы пробужден по событию прихода данных на порт который мидлет зарегистрировал, то телефон сразу же после п.4 переправляет в мидлет то что пришло (т.е. или смс-ку или сокет)
6) Мидлет читает полученные данные
7) Выход из мидлета


А если без сертификата, то...
мидлет будет выдавать 2 запроса на разрешения?
 один на пробуждение Мидлета, а второй на создание серверсокета?
Этот момент важен. Нельзя ли сделать так, чтобы вообще никаких запросов на пробуждение-серверизацию не требовалось без сертификата?

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


а насчёт моего пускта 1) я так понимаю (теперь), что в п.4 телефон перенаправляет сетевой запрос, как будто этот запрос пришёл не до запуска мидлета, а после...
PM MAIL   Вверх
eugine_s
Дата 28.9.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(Lisus @  28.9.2008,  14:13 Найти цитируемый пост)
А если без сертификата, то...
мидлет будет выдавать 2 запроса на разрешения?
 один на пробуждение Мидлета, а второй на создание серверсокета?


Да. Два.

Хотя вполне возможно, что будет еще какие-то "промежуточные" запросы в самом начале. Типа "Разрешить этому мидлету работать с PushRegistry?" Ответил - нет, тогда в дальнейшем всегда не будет запросов, мидлет всегда будет получать "нет". Если ответил "да" тогда всегда будет спрашивать у пользователя: "разрешить? да-нет" (если в настройках стоит: всегда спрашивать).

Где-то так, но я на 100% не уверен. На этот вопрос Dummy наверное сможет ответить точно.


Цитата(Lisus @  28.9.2008,  14:13 Найти цитируемый пост)
Этот момент важен. Нельзя ли сделать так, чтобы вообще никаких запросов на пробуждение-серверизацию не требовалось без сертификата?


Можно.
Где-то видел такое, что можно хакнуть телефон и он запросы вообще не будет выдавать (кажись для SE видел такое). smile

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


Цитата(Lisus @  28.9.2008,  14:13 Найти цитируемый пост)
Я так понимаю что без сертификата некоторые модели будут иметь возможность настраивать разрешение один раз и на всегда.


Нет. Один раз и на всю сессию. 

Цитата(Lisus @  28.9.2008,  14:13 Найти цитируемый пост)
Для всех остальных нужен сторонний сертификат

Сторонний сертификат.. что ты тут имеешь ввиду?
Почему я указал Verisign или Thawte - так как эти сертификаты уже установлены в хранилище Java сертификатов(именно Java сертификатов) в телефоне. Да там есть еще другие сертификаты, но они не такие распространенные (т.е. может оказаться что подписанное приложение не запуститься на каком-то телефоне, так как подписано сертификатом, который не установлен в телефоне).

Взять какой-то сторонний сертификат (например свой собственный - он не сложно делается) - но нужно теперь этот сертификат запихнуть в телефон (в хранилище Java сертификатов) - а это уже проблема. Большинство телефонов просто так не разрешают такое делать (например, на SE - это или перешивать телефон или еще пару "хакерских" методов - т.е. не каждый за такое возьмется)



PM MAIL   Вверх
Lisus
Дата 28.9.2008, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 21.10.2007

Репутация: 1
Всего: 2



Цитата(eugine_s @  28.9.2008,  13:47 Найти цитируемый пост)
Сертификат дается на год и все равно сколько мидлетов ты им подпишешь.


А потом что?
Пользователь опять будет вынужден всё ручками делать?
можно его потом как-нибудь продлить?
Почему вообще есть временные ограничения?

А если надо дольше, что делать-то?
Я так понимаю, что сертификат - это вещь связанная с определённым мидлетом, а не с определённым телефоном. (А то мало ли.)


Цитата(eugine_s @  28.9.2008,  16:27 Найти цитируемый пост)
Где-то так, но я на 100% не уверен. На этот вопрос Dummy наверное сможет ответить точно.


Хотелось бы услышать и этого товарища.

А вообще большое спасибо, за пару часов на форуме я гораздо лучше начал себе это всё представлять, чем за целый день вчерашний.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.