forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_jsr256 - Работа с сенсорами телефона (http://forum.boolean.name/showthread.php?t=9692)

odd 02.11.2009 16:56

Lib_jsr256 - Работа с сенсорами телефона
 
Вложений: 1
Библиотека немного доработана. Теперь можно обращаться к любым сенсорам.

Для начала неплохо бы вызвать функцию get_version, которая вернет вам установленную на телефоне версию JSR256 или строку "null" если данный JSR там не установлен. Собственно, если вернется "null", то вызов других функций библиотеки может привести к зависанию приложения.

Следующим шагом неплохо бы получить весь список сенсоров, которые есть в телефоне. Для этого служит функция get_list, которая вернет результат в виде строки, разделенной символом "|" в формате:
имя_датчика|имя_сенсора|контекст|....

Мой телефон, к примеру, выдал такой список:

PHP код:

axis_x|acceleration|user
axis_y
|acceleration|user
axis_z
|acceleration|user
handsfree_presence
|com.sonyericsson.io.sensor.handsfree_presence|user
network_field_intensity
|network_field_intensity|device
battery_charge
|battery_charge|device
charger_state
|battery_charge|device
steps_per_minute
|com.sonyericsson.io.sensor.steps_per_minute|user
step_count
|step_count|user
keylock_status
|com.sonyericsson.io.sensor.keylock_changed|user 

Теперь давайте разбираться в списке.
Датчики axis_x, axis_y, axis_z принадлежат к сенсору acceleration,
а в сенсоре battery_charge содержится два датчика: battery_charge и charger_state.
Также есть счетчик шагов, датчик наличия гарнитуры и другие, но сейчас они меня мало интересуют.

Теперь, если я хочу получать данные от какого либо сенсора (не датчика!)
я вызываю функцию Init, которая принимает 3 параметра: имя сенсора, контекст сенсора и количество датчиков в сенсоре.

К примеру, мне нужно прослушать датчики сенсора акселерометра.
Тогда вызывать нужно так: Init('acceleration', 'user', 3); а для прослушивания датчика состояния батареи нужно вызывать: Init('battery_charge', 'device', 2);

Ну и конечно получить данные от датчика сенсора можно функцией get_value, которая принимает только номер датчика.

Таким образом, пример программы для прослушивания, к примеру, состояния батареи:

PHP код:

Program JSR256test;
Uses jsr256;
Var     
sString;
        
iinteger;
Begin
    s
:=get_list;
    
ShowForm;
    
i:=FormAddString(s); // Показ списка датчиков
    
Delay(100000); // 100 секунд я думаю хватит
    
ShowCanvas;
    
Init('battery_charge''device'2); // Подписываемся на прослушивание датчика заряда батареи
    
repeat
        SetColor
(255255255);
        
FillRect(00GetWidthGetHeight);
        
SetColor(000);
        
DrawText(''+get_value(0), 55);
        
DrawText(''+get_value(1), 525);
        
Repaint;
        
Delay(100);
    
until false;
End

Действительно, при запуске получим столбик из двух чисел: заряд батареи в процентах и 0 или 1 если подключено или отключено зарядное устройство.

Вот другой пример, черный шарик, который катается по экрану в зависимости от наклона аппарата:

PHP код:

Program JSR256test;
Uses jsr256;
Var 
xyxsysxayarreal;
Begin
    Init
('acceleration''user'3); // Опрашиваем 3 датчика
    
    
xs:=0ys:=0// Начальная скорость мячика
    
r:=30// Радиус шарика
    
x:=0y:=0// Начальные кординаты
    
    
repeat    // бесконечный цикл
    
        
xa := -get_value(0)*1.0 10000.0// запрашиваем данные у акселерометра
        
ya := get_value(1)*1.0 10000.0;
    
        
SetColor(255255255);
        
FillRect(00GetWidthGetHeight); // Очистка экрана
        
SetColor(000);
        
        
ys := ys ya 9.82;
        
xs := xs xa 9.82// 9.82 - притяжение
        
ys := ys ys 0.01;
        
xs := xs xs 0.01// Немного матана
        
        
if(ys 0.0then
        begin
            ys 
:= -(ys ys 0.15); // 0.15 - это коэффициэнт упругости мячика
            
:= 0.0;
        
end
        
else
        if(
ys GetHeight rthen
        begin
            ys 
:= -(ys ys 0.15);
            
:= GetHeight r;
        
end
        
else := y+ys;
        
        if(
xs 0.0then
        begin
            xs 
:= -(xs xs 0.15);
            
:= 0.0;
        
end
        
else
        if(
xs >= GetWidth rthen
        begin
            xs 
:= -(xs xs 0.15);
            
:= GetWidth r;
        
end
        
else := x+xs;
        
        
FillEllipse(Trunc(x), Trunc(y), Trunc(r), Trunc(r)); // Рисуем мячик
        
Repaint// Перерисовка экрана
    
until false;
End

Таким образом, можно получать информацию практически из любого открытого датчика телефона.
Если у вас есть другие интересные датчики обязательно попробуйте поопрашивать их.

DIMMON4IK 02.11.2009 17:09

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Идём к iPhone играм :)
_________________
Sony ericsson W710 - есть акселерометр (о Idou и говорить не хочу)

Bruteo 02.11.2009 19:27

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Спасибо большое, odd!
На Nokia 5800 пока не удалось заставить работать тестовый пример. Пытаюсь докопаться до истины.
Установка плагина для поддержки JSR256 не помогла: http://www.forum.nokia.com/info/sw.n...r_s60_5_0.html

Upd. Всё работает. Осталось выяснить, работало ли до установки плагина =)

С нетерпением жду либы с возможностью обращения к другим устройствам. Ещё раз спасибо! =)

А возможно ли реализовать обработку случая, когда нет поддержки акселерометра, чтобы приложение не вылетало?
Nokia E61, например, ругается на необработанное исключение.

<-TzX-> 12.11.2009 11:38

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Nokia N82 пример не завелся, пишет "Необработаное исключение". Просьба Bruteo выложить пример, который завелся на 5800

Bruteo 12.11.2009 14:40

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Например, так.
Код:

Program JSR256test;
Uses accelerator;
Var x, y, z: real;
Begin
    init;
    repeat    // бесконечный цикл
    setColor(255,255,255);
    FillRect(0, 0, getWidth, getHeight);
    setColor(0,0,0);
        x := get_value(0); // запрашиваем данные у акселерометра
        y := get_value(1);
        z := get_value(2);
DrawText('x '+x,0,0);
DrawText('y'+y,0,50);
DrawText('z'+z,0,100);
delay(100);
        Repaint; // Перерисовка экрана
    until false;
End.


<-TzX-> 12.11.2009 15:04

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Пример даже не скомпилился. Переделал так:
Код:

Program JSR256test;
Uses jsr256;
Var x, y, z: real;
Begin
    init('acceleration', 'user', 3);
    repeat    // бесконечный цикл
    setColor(255,255,255);
    FillRect(0, 0, getWidth, getHeight);
    setColor(0,0,0);
        x := get_value(0); // запрашиваем данные у акселерометра
        y := get_value(1);
        z := get_value(2);
DrawText('x '+x,0,0);
DrawText('y'+y,0,50);
DrawText('z'+z,0,100);
delay(100);
        Repaint; // Перерисовка экрана
    until false;
End.

Все равно не пошло

odd 12.11.2009 19:16

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Попробуй перед запуском Init и остальным выяснить версию jsr256.
Если там возвращается null, то нечего и соваться делать всё остальное.

Trazzy 13.11.2009 11:08

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Возможно ли узнать соостояние заряда батареи на обычном телефоне? Например: 6233i

<-TzX-> 13.11.2009 16:34

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Сообщение от ArtikZ (Сообщение 124707)
Возможно ли узнать соостояние заряда батареи на обычном телефоне? Например: 6233i

Если после запроса сансоров, он там будет, то думаю да

Trazzy 14.11.2009 17:16

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Пробовал получить список на нок6233i и симС65.. Виснет прога в начале... (и get_version не помогает)

odd 14.11.2009 17:30

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Сообщение от ArtikZ (Сообщение 125060)
Пробовал получить список на нок6233i и симС65.. Виснет прога в начале... (и get_version не помогает)

Думаю на этих телефонах нет поддержки сенсоров.

Trazzy 14.11.2009 17:47

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Думаю на этих телефонах нет поддержки сенсоров.
Вот поэтому и спрашивал, возможно ли узнать заряд батареи на таких телефонах?!

<-TzX-> 16.11.2009 03:17

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Следовательно нет. Да и вообще предложение отписываться о моделях телефонов, на которых либа смогла получить информацию о сенсорах.

IDOL 1234 25.11.2009 18:33

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
program g;
uses jsr256;
var a:string;
begin
a:=get_version;
drawtext(a,1,1);
repaint;
delay(3000)
end .
- не запускается. Cannot create class in system package.
Остальные ф-ции - аналогично.

odd 26.11.2009 18:50

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Мда. Как показывает практика, лучше не вызывать даже get_version, иначе такая проверка может быть фатальной для телефонов, с отсутсвием сенсоров.

Лучше проверять вручную с помощью вызова
PHP код:

sensor_version := GetProperty('"microedition.sensor.version'); 

Ну а потом уже в зависимости от того, какую версию получим уже делать выводы,
стоит ли дальше делать инициализацию библиотеки или совсем не стоит.

odd 26.11.2009 18:53

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Сообщение от IDOL 1234 (Сообщение 126885)
- не запускается. Cannot create class in system package.
Остальные ф-ции - аналогично.

Скорее всего в твоем телефоне отсутствуют нужные классы, отвечающие за обработку сенсоров вот телефон и ругается, что не может их найти.

IDOL 1234 01.12.2009 01:09

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
не запускается на 4х эмуляторах и 2х телефонах

ps подозреваю, что в либе нечто подобное и написано:
__цитата________________________________
sensor_version := GetProperty('"microedition.sensor.version');
________________________________________

Так почему же мидлет падает?

да... Кто-нибудь знает "super bt. hack"?
с его помощью виден, например, уровень сигнала сотовой связи, хотя такой ф-ции у меня в jave нет. И оставшийся заряд тоже показывает...

ViNT 01.12.2009 01:27

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
пробуй для начала вызвать get_property без подключения библиотеки.

demon112 01.12.2009 15:49

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Подскажите как работать с сенсорным экраном...

ViNT 01.12.2009 15:54

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Сообщение от demon112 (Сообщение 127814)
Подскажите как работать с сенсорным экраном...

Для этого есть Lib_sensor в теме про Lib_game.

odd 02.12.2009 10:34

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Мидлет падает при вызове любой функции библиотеки потому, что сама библиотека наследует специальный класс DataListener для прослушивания потока данных от сенсоров. Соответственно если нет сенсоров, то нет и этого класса, а значит и наследовать нечего. Поэтому мидлет и впадает в полный ступор. Поэтому лучше проверить вручную с помощью GetProperty версию JSR256 и потом уже вызывать библиотеку, а лучше даже и не помещать данную библиотеку в мидлет предназначенный для обычных (без поддержки сенсоров) телефонов. Пока тестировать можно только на эмуляторах из пакета WTK 3.0 или на реальных телефонах, список которых я недавно выкладывал.

Nokia: 5500, N82, N85, N93i, N95, N95 8GB, N96
Sony ericsson: K850, C510, C901, C902, C903, C905, W395, W595, W705, W760, W902, W910, W980, W995, G705, F305
А также: iPhone 3G, Sagem myMovieBox, Samsung i8510 Innov8

psih1 22.07.2010 11:39

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
У меня чтот второй пример очень медленно работает хотя сенсоры на максимум работают или это так и должно быть?????????????7

IDOL 1234 05.08.2010 22:02

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
А китаися i68+ поддерживает считывание показаний акселерометра из java?

cherepets 05.08.2010 23:44

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
еще Френсис Бэкон указывал на звачимость опыта в постижении истины...

IDOL 1234 06.08.2010 01:41

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Подождите... Что-то меня глючит...
Как у телефона может не быть сенсоров?? Ладно - акселерометр, его, слава Богу, ещё не во все аппараты пихают, но аккумулятор - то, надеюсь, всегда есть?

ViNT 06.08.2010 01:57

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Сообщение от IDOL 1234 (Сообщение 157456)
Подождите... Что-то меня глючит...
Как у телефона может не быть сенсоров?? Ладно - акселерометр, его, слава Богу, ещё не во все аппараты пихают, но аккумулятор - то, надеюсь, всегда есть?

Аккумулятор-то есть, но видимо не все телефоны предоставляют доступ к данным о его состоянии.

IDOL 1234 06.08.2010 11:49

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
sensor_version := GetProperty('microedition.sensor.version'); вгоняет мидлет в глубокую белую задумчивость... С чего бы это?

cherepets 06.08.2010 12:20

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
может китайцы вообще на jsr-256 забили?

IDOL 1234 06.08.2010 12:45

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
На i68 я забил. Его обращение к этой апи вообще вырубило :sarcastic_hand:
Тестил на эмуляторах и se k510i.

IDOL 1234 20.08.2010 14:07

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Так.
Имеется:


Телефон с GPS - 1 шт
Яндекс Карты, в которых он работает - 2 шт
Мидлет, пытающийся прослушивать сенсоры и перманентно падающий ~ 6 шт
Лог эмулятора с ошибкой, совпадающей с выдаваемой реальным аппаратом - 1 шт:

KEmulator Lite v0.9.7 Running...
Get classes from C:\111\rere\ball\bin\ball.jar
Get class FW
Get class Lib_jsr256
Get class M
Custom.jar.getResourceStream: /icon.png (284)
Launch MIDlet class: FW
>>Exception in thread "Thread-6" >>java.lang.NoClassDefFoundError: javax/microedition/sensor/DataListener
>> at java.lang.ClassLoader.defineClass1(Native Method)
>> at java.lang.ClassLoader.defineClass(ClassLoader.java :752)
>> at java.lang.ClassLoader.defineClass(ClassLoader.java :593)
>> at emulator.custom.a.findClass(Unknown Source)
>> at emulator.custom.a.loadClass(Unknown Source)
>> at java.lang.ClassLoader.loadClass(ClassLoader.java:3 32)
>> at M.R(Unknown Source)
>> at M.run(Unknown Source)
>> at java.lang.Thread.run(Thread.java:717)
>>Caused by: java.lang.ClassNotFoundException: javax.microedition.sensor.DataListener
>> at java.lang.ClassLoader.findClass(ClassLoader.java:4 86)
>> at emulator.custom.a.findClass(Unknown Source)
>> at java.lang.ClassLoader.loadClass(ClassLoader.java:3 92)
>> at emulator.custom.a.loadClass(Unknown Source)
>> at java.lang.ClassLoader.loadClass(ClassLoader.java:3 32)
>> ... 9 more

Код самого простого из мидлетов:

Program JSR256test;
Uses jsr256;
Var s: String;
i: integer;
Begin
s:=get_list;
ShowForm;
i:=FormAddString(s);
Delay(10000);
ShowCanvas;

End.


В чём ошибка? Или я просто не с той стороны копаю?

Пойду ковырять Карты...

End.

IDOL 1234 20.08.2010 14:19

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Декомпилировал Карты и понял, что пока я разберусь, как они работают, спутники GPS попадают. Поиск по строкам "GPS" и "sensor" ничего полезного не дал. Пойду гуглить.

IDOL 1234 20.08.2010 14:43

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Всё, понял. Это другая JSR. 179. Так что меня здесь не было =Р

deathbel 26.02.2011 00:03

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
А над либой ктонибуть еще работает? на эмуле kwyshell - вылетает с ошибкой, на китайце F035 - виснет на старте при попытке определить версию. чегото другого чтоб проверить к сожалению под руками нету.

UPD
проверил на нокии н70 - таже ботва, просто виснет при просто попытке получить список сенсоров.

GRAY_WOLF 26.02.2011 20:08

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Сообщение от deathbel (Сообщение 180649)
А над либой ктонибуть еще работает? на эмуле kwyshell - вылетает с ошибкой, на китайце F035 - виснет на старте при попытке определить версию. чегото другого чтоб проверить к сожалению под руками нету.

UPD
проверил на нокии н70 - таже ботва, просто виснет при просто попытке получить список сенсоров.

А разве в тех телах, что ты перечислил есть хоть один датчик- положения, батарей и пр.?

deathbel 27.02.2011 14:28

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Сообщение от GRAY_WOLF (Сообщение 180713)
А разве в тех телах, что ты перечислил есть хоть один датчик- положения, батарей и пр.?

У китайца точно есть гравити-сенсор - вот только может он также как и gps доступен только прошивке, ладно в нокии N70 нет ни одного сенсора, даже батареи, но тогда должно выводится Null (или как на эмуле ругаться на отсутсвиие чегонибуть) а не виснуть :dontknow: или я чегото в этой жизни не понимаю.

IDOL 1234 27.04.2011 19:43

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Появился телефон с работающими сенсорами. Шарик из второго примера грустно висит в левом верхнем углу. Акселерометр работает, пример 4 показывает значения. Пойду копать.

odd 27.04.2011 19:54

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
У меня тоже сенсоры на SE работают, шарик катается, а вот на Samsung видимо акселерометр не так реализован. Там шарик не двигается.

IDOL 1234 27.04.2011 23:30

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Переделал под свой тел.
Код:

JSR256test;
Uses jsr256;
Var x, y, sx, sy: real;

ou:boolean;
Begin
                x:=120;
                y:=120;
               
    init('acceleration', 'user', 3);
    repeat
    setColor(255,255,255);
    FillRect(0, 0, getWidth, getHeight);
    setColor(0,0,0);
        sx :=sx -get_value(0)/50;
        sy :=sy+ get_value(1)/50;
        sx:=sx*0.9;
        sy:=sy*0.9;
       
        x:=x+sx;
        y:=y+sy;
       
        if (x<0) then begin x:=0; sx:=-sx; end;
        if (y<0) then begin y:=0; sy:=-sy; end;
        if (x>210) then begin x:=210; sx:=-sx; end;
        if (y>290) then begin y:=290; sy:=-sy;end;
                               
        drawimage(loadimage('/ball.png'),trunc(x),trunc(y));
       
       


delay(20);
        Repaint;
    until false;
End.




Шарик почему-то при небольшом наклоне пытается двигаться по горизонтали/вертикали. Режим плавающей запятой переключил. Что ему ещ~ надо??

se w715i
Акселерометр возвращает значения от -1062 до 1062 (больших значений не замечал) с шагом 18.

А какой тип он возвращает? Не целочисленный случайно? А то мало ли..

IDOL 1234 30.04.2011 13:25

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Вложений: 1
Сегодня ВНЕЗАПНО даже для самого себя сел за комп и написал симулятор катающихся шариков. В архиве 2 версии: для телефонов с акселерометром и для обычных. Вс~ 240*320. Переделать уже не успеваю, объединить тоже. До вторника доступного ПК у меня не будет(
Да, чуть не забыл. Управление: * - добавить шарик, # - убрать последний созданный шарик, 0 - выход. Если нет акселя, то управление наклоном - 2,4,6,8 и джойстик.

Atqt 19.08.2011 18:23

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
... Вопрос был исчерпан.

Wladymyr 09.08.2012 22:26

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
На моём Samsung S5230 acceleration не работает(((((( возвращют все 3 значения "0"

Wladymyr 19.08.2012 14:15

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
А не.... работает... просто не acceleration,а rotation(device) нужно вводить :-D

Amigo888 20.08.2012 19:13

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
знает ли кто нибудь как можно отключить поворот экрана в приложении(nokia5230 при повороте переворачивает мидлет)

Atqt 21.08.2012 19:16

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
В nokia5230 нужно отключать полностью поворот. Особых настроек поворота для приложений в нем нет.

Amigo888 22.08.2012 00:01

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
да это я знал) решил проблемму сделав полнустью приложение в горизонтальном режиме)


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

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