forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Как автообновить JAVA прграммку на мобиле ? (http://forum.boolean.name/showthread.php?t=6073)

jkeks 03.07.2008 15:06

Как автообновить JAVA прграммку на мобиле ?
 
Хочу сделать так чтобы программка установленная на сотовом могла сама себя обновлять, т.е. передавать ссылку системе, которая запустит браузер для установки.
Как это сделать ? Непойму.. а знаю что так делают:SOS:

ViNT 03.07.2008 19:02

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Это можно сделать с помощью функции platform_request из библиотеки m2.

odd 04.07.2008 08:23

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Подключаешь библиотеку m2 и вызываешь функцию
типа platform_request('http://tvoi.portal/midlet.jar')
Я такое проделывал в реальных приложениях. Даже чуть сложнее делал.
Сначала скачивал текстовый файл, в котором прописана версия программы, а потом анализировал текущую версию программы с выложенной на сайте и в зависимости от результатов и выбора пользователя скачивал или не скачивал обновленную версию программы.
Я так делал на SE. Nokia, насколько я понял, такого не позволяют.

jkeks 04.07.2008 08:55

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Поставил, сама функция работает, т.е. запускается стандартный браузер.
Только у меня возник вопрос следующий: После успешной загрузки, стандартный браузер говорит, что KAKA.jar не поддерживается телефоном и записывает программку в папку Прочее (телефон SE K300). Тогда как обновлялся я и не раз из других программок. Мне же надо перезаписать саму себя в папке Приложения. А тут даже выбора нет никакого. Не подскажете в чем проблема может быть ?

jkeks 04.07.2008 09:41

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
попробовал обновить программку чужую (w1) обновилась прекрасно, дело не в телефоне значит

GOODBYTE 04.07.2008 09:45

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Создай на хостинге с поддержкой PHP документ.
Назови его например index.php , и впиши в него вот этот код :

PHP код:

<?
    $all_versions = array( // массив со всеми версиями программы.
    0 => '1.0.0',
    1 => '1.0.1',
    2 => '1.0.2',
    3 => '1.0.3',
    4 => '1.0.4',
    5 => '1.0.5'
    );
    
    $client_version = isset($_GET['version']) ? $_GET['version'] : $all_versions[0];
    
    if($client_version != $all_versions[sizeof($all_versions)-1])
    {
        echo 'Necessary upgrade.';
    } else {
        echo 'Upgrade does not need.';
    }
    
?>

запомни к нему адрес.

А обращаться из MP к серверу очень просто. :-)
Только вот в библиотеке lib_web от pilgrim'a непонятно почему метод web.get_response ничего не возвращает..

вот код.

Код:

program internet;

uses web;

var                connection : integer;
                                VERSION, resultat : string;       

begin
        VERSION := '1.0.0';       
        connection := web.open('http://localhost/index.php?version=' + VERSION);

        web.set_method('GET');
                                       
        web.set_property('Host', 'localhost');
        web.set_property('Accept', 'text/html');
        web.set_property('Accept-Charset', 'UTF-8');
        web.set_property('Accept-Encoding', 'deflate');
        web.set_property('Accept-Language', 'ru');
        web.set_property('User-Agent', 'MP Browser');
                                                       
                if web.send = 200 then
                                        begin
                                                                       
                                        if web.get_response = 'Necessary upgrade.' then
                                       
                                                begin
                                                       
                                                        DrawText('Обновление',0,0);
                                                        repaint;
                                                        delay(5000);
                                                       
                                                end;
                                       
                                        else
                                               
                                                begin

                                                        DrawText('Всё ок',0,0);
                                                        repaint;
                                                        delay(5000);

                                                end;
               
                                        end;
                        else

                                        begin
                                                                       
                                        DrawText('Ошибка сервера.',0,0);
                                        repaint;
                                        delay(5000);
                                                                       
                                        end;
               
                web.close;

end.


jkeks 04.07.2008 10:46

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Дак это че, пример как прочитать чего-то, а я хочу инсталлировать.
Есть программа(123.jar) в папке Приложения.
1. Запускаем ее (123.jar)
2. В ней выбираем "Обновить"
3. Программа (123.jar) Запускает встроенный браузер
4. Браузер завершает работу программы
5. Браузер скачивает новую версию 123.jar
6. Браузер Перезаписывает старую версию (123.jar) новой (123.jar)
7. Браузер Предлагает запустить новую версию (123.jar)
Вот так все должно быть.
Данный вначале пример запускает браузер и тот скачивает судя по всему новую версию, но он не может ее перезаписать по причине:
что (123.jar) "не поддерживается телефоном" и записывает программку в папку "Прочее"

GOODBYTE 04.07.2008 13:10

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Цитата:

Дак это че, пример как прочитать чего-то, а я хочу инсталлировать.
так тебе можно и всю программу написать =))

а по сути добавил ту же m2 библиотеку, и еще почитал бы о функции halt в мануале. И всё.. ))

jkeks 04.07.2008 13:48

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
после вызова r:=platform_request('http://asdasd/123.jar');
сразу делаю halt - не работает так.

ViNT 04.07.2008 14:36

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Цитата:

Сообщение от jkeks (Сообщение 81718)
после вызова r:=platform_request('http://asdasd/123.jar');
сразу делаю halt - не работает так.

В смысле обновление не происходит или приложение не закрывается?

GOODBYTE 04.07.2008 14:52

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
ViNT, скорее всего не закрывается приложение.
Например, у меня на Symbian открытые приложения переходят в "паузу", т.е. на время отхода меня в меню или куда-то еще в телефоне (но не в приложении) оно приостанавливается.
Скорее всего оно выключится только тогда, когда пользователь вернется в программу..

ViNT 04.07.2008 14:58

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
У меня на SE без проблем Halt'ом закрывается(если поставить его сразу после platform_request.
Вообще, если бы дело было в том, что приложение не закрыто, SE написал бы что-то типа "Ошибка при выполнении операции". А тут, похоже, MIME-тип не распознает. Я в вопросах php не силен, но похоже нужно чтобы сервер передавал верное значение MIME-Type(это не винда, тут расширение файла мало что значит).

GOODBYTE 04.07.2008 15:11

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
PHP код:

<? 
    $all_versions = array( // массив со всеми версиями программы. 
    0 => '1.0.0', 
    1 => '1.0.1', 
    2 => '1.0.2', 
    3 => '1.0.3', 
    4 => '1.0.4', 
    5 => '1.0.5' 
    ); 
     
    $client_version = isset($_GET['version']) ? $_GET['version'] : $all_versions[0]; 
     
    if($client_version != $all_versions[sizeof($all_versions)-1]) 
    { 
        echo 'Necessary upgrade.'; 
    } else { 
        echo 'Upgrade does not need.'; 
    } 
     
?>

если ты про это, то он просто показывает последнюю версию мидлета, ну и собственно возвращает результат.

А насчёт отдачи сервером, то это нужно прописывать расширения в .htaccess , но это при условии что сервер Apache.

Код:

AddType text/vnd.sun.j2me.app-descriptor .jad # для JAD
AddType application/java-archive .jar # для JAR


jkeks 04.07.2008 15:27

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Да мне не надо проверять: Есть новая версия или нету ее.
Мне надо Проинсталлировать и все.
Проверка у меня давно написана.
Попробовал добавить в htaccess строчки:
AddType text/vnd.sun.j2me.app-descriptor .jad # для JAD
AddType application/java-archive .jar # для JARЭффекта никакого, вот она ссылка мидлетега:
http://freemir.ru/freemir.jar в нем есть кнопочко - Обновить.

ViNT 04.07.2008 15:34

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
SE k510i - полет нормальный.
Запускается загрузка, приложение грузится и устанавливается.

Piligrim 04.07.2008 20:56

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Все, в принципе верно.
Для полного соответствия стандартам можно передавать ссылку не на jar, а на jad.

odd 05.07.2008 03:22

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Вложений: 1
Не опоздал? Вот ещё один примерчик программы, которая сама себя обновляет с проверкой на новизну версии. SE K550 полёт нормальный.

Ghost_Russia 05.07.2008 17:29

Re: Как автообновить JAVA прграммку на мобиле ?
 
odd спасибо, на SE W810i полёт нормальный :)

jkeks 07.07.2008 07:02

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Щас провееерим 8)

jkeks 07.07.2008 07:17

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Кстати, k300 пробовал и jad подсовывать, Может я его сделал неправильно, только URL поменял там, остальное соответствует, но не работало.
А в приведенной проге я нашел опять же единственную нужную строчку: platform_request(url+file2) которая не пашет на k300, однако повторяюсь: Мобильная софтина от W1.RU без проблемм устанавливает обновление на этом же телефоне, Правда не перезаписывая, а устанавливала рядышком с другим именем, но все же. Та же Opera обновилась без проблемм.
А вот JAD который клал:
Цитата:

MIDlet-1: freemir, , FW
MIDlet-Jar-Size: 14965
MIDlet-Jar-URL: http://freemir.ru/freemir.jar
MIDlet-Name: freemir
MIDlet-Vendor: MIDletPascal
MIDlet-Permissions: javax.microedition.io.Connector.http
MIDlet-Permissions: javax.wireless.messaging.sms.send
MIDlet-Icon:
MIDlet-Version: 1.0.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
Размер файла соответствовал на тот момент.

jkeks 07.07.2008 07:51

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Пока писал подумал - а зачем я менял JAD, попробовал писать тот же что и генериться - обновление стало проходить ХОРОШО.. НО!!
Теперь ясно что надо действительно отправлять JAD, но при этом браузер не может заменить на скачанный файл. 8(__)
Во время работы браузера программа еще запущщена, а как только приходит ответ от браузера, программа тут же выполняет HALT, код такой:
Цитата:

r:=platform_request('http://freemir.ru/freemir.jad');
halt;
Судя по всему программа ждет окончания работы platform_request, и браузер не может заменить активное приложение.
Так ли это ?
И как от этого избавиться ?

jkeks 07.07.2008 14:03

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Что кстати интересно, если ссылаться на jar, то на новых телефонах это срабатывает и программа обновляется, а если ссылаться на jad, то на некоторых оно так же не может обновить, Я это не утверждаю ,просто один чел сказал что перестало обновляться(тестер). И сообщение точно такое же как и на K300, а с jar-работало нормалек.

ViNT 07.07.2008 14:17

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
У меня (SE k510i)программа закрывается halt'ом сразу после вызова platform_request и приложение нормально обновляется JAR'ом.
Если действительно программа ждет выполнения platform_request, можно попробовать прицепить другой поток, который будет закрывать программу.

jkeks 07.07.2008 14:33

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Как-то это неправильно, хотя я уже думал об этом, Может быть отловить событие перехода в ждущий режим, илипросто второй поток запустить, но ни того ни другого я не знаю как сделать на а на Java и подавно.
Может кто подскажет как можно правильно завершиться ?

ViNT 07.07.2008 14:42

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
События о переходе в ждущий режим как такового нет. Точнее, обработчик есть, но только в java.

Второй поток можно запустить с помощью библиотеки Lib_thread.

jkeks 08.07.2008 07:20

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
ни примеров, ни толком описания нету для либы.. может кините простой примерчик как запустить паралельный процесс и в нем через 10 секунд завершить работу программы.

odd 08.07.2008 08:28

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
За многопоточность (1 дополнительный поток) отвечает библиотека Lib_thread. Подключи её в программу. Далее добавляешь в свою программу процедуру:
Код:

Procedure threadaction();
begin
    Delay(10000); Halt; // Ну или что-то типа того
end;

А для вызова в программе делаешь сначала thread.init, а когда нужно запускать поток, то пишешь thread.start.

jkeks 08.07.2008 13:23

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Сделал как написали, в самом начале после begin написал
thread.init;

На мобиле при вызове init белый экран и все висит, это если вначале в самом, а если например не сразу его вызывать а из функции какой-нибудь, то функция эта просто напросто игнорируется и ничего не происходит.
Скачивал либу отсюда http://forum.boolean.name/attachment...6&d=1181032475

jkeks 09.07.2008 07:38

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Интересно кто автор этой библиотеки, видимо в ней ошибка где-то, почему-то виснет телефон. k300 не должен виснуть вроде как.
Даже пример который идет к этой либе виснет точно так же. Показывая Белый чистый экран.
Или есть другие варианты ?

odd 09.07.2008 08:10

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
А ты в проект файл Thread_class.class добавлял?

jkeks 09.07.2008 09:15

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Значит че я сделал.. В папку MidletPascal записал следующие файлы:
Thread_class.class
Thread_class.java
Lib_thread.class
Lib_thread.java

В проекте добавил :
Цитата:

uses thread;
..
Procedure threadaction();
begin
Delay(10000); Halt; // Ну или что-то типа того
end;
..
begin //главный блок
thread.init;
..
thread.start;
r:=platform_request('http://freemir.ru/freemir.jar');
..
end.

jkeks 09.07.2008 15:07

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
чего, мыслей нету ни у кого больше ?

odd 09.07.2008 22:40

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Не, не так. Thread_class.class надо добавить в твой проект так же как ты картинки добавляешь. Или в готовый мидлет запихни с помощью какого-нибудь архиватора типа WinRAR.

ViNT 10.07.2008 14:29

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
odd сказал правильно - нужно добавить Thread_class.class как ресурс, и все будет работать. Кстати, это написано в файле Lib_thread.txt.

jkeks 15.07.2008 08:52

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Спасибо Авторам! Все получилось и теперь на SE K300 все отлично обновляется. Порадовало даже то что Когда программа спрашивает разрешения на доступ к WAP, это время в таймере не задействовано и программа не сбрасывается, т.е. не нужно успевать разрешить доступ в течение 5 секунд. Проверено только на SEK300, если у других будут проблемы - напишу еще. Всем спасибо огромное.
Могу разместить ссылки и анкоры на ваши проекты, если укажете.

AssA 31.07.2011 19:33

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
всем спасибо, сделал.
подскажите, можно ли как-то настроить, чтобы при компиляции проекта в файле JAD строка MIDlet-Jar-URL прописывалась как надо?
например:
MIDlet-Jar-URL: http://site/app.jad

ато ручками каждый раз... не трудно, но не солидно :)

ViNT 03.08.2011 01:13

Ответ: Как автообновить JAVA прграммку на мобиле ?
 
Цитата:

Сообщение от AssA (Сообщение 197378)
всем спасибо, сделал.
подскажите, можно ли как-то настроить, чтобы при компиляции проекта в файле JAD строка MIDlet-Jar-URL прописывалась как надо?
например:
MIDlet-Jar-URL: http://site/app.jad

ато ручками каждый раз... не трудно, но не солидно :)

Думаю, поможет данная утилита


Часовой пояс GMT +4, время: 13:29.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot