|
02.11.2009, 16:56
|
#1
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Lib_jsr256 - Работа с сенсорами телефона
Библиотека немного доработана. Теперь можно обращаться к любым сенсорам.
Для начала неплохо бы вызвать функцию get_version, которая вернет вам установленную на телефоне версию JSR256 или строку "null" если данный JSR там не установлен. Собственно, если вернется "null", то вызов других функций библиотеки может привести к зависанию приложения.
Следующим шагом неплохо бы получить весь список сенсоров, которые есть в телефоне. Для этого служит функция get_list, которая вернет результат в виде строки, разделенной символом "|" в формате:
имя_датчика|имя_сенсора|контекст|....
Мой телефон, к примеру, выдал такой список:
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, которая принимает только номер датчика.
Таким образом, пример программы для прослушивания, к примеру, состояния батареи:
Program JSR256test; Uses jsr256; Var s: String; i: integer; Begin s:=get_list; ShowForm; i:=FormAddString(s); // Показ списка датчиков Delay(100000); // 100 секунд я думаю хватит ShowCanvas; Init('battery_charge', 'device', 2); // Подписываемся на прослушивание датчика заряда батареи repeat SetColor(255, 255, 255); FillRect(0, 0, GetWidth, GetHeight); SetColor(0, 0, 0); DrawText(''+get_value(0), 5, 5); DrawText(''+get_value(1), 5, 25); Repaint; Delay(100); until false; End.
Действительно, при запуске получим столбик из двух чисел: заряд батареи в процентах и 0 или 1 если подключено или отключено зарядное устройство.
Вот другой пример, черный шарик, который катается по экрану в зависимости от наклона аппарата:
Program JSR256test; Uses jsr256; Var x, y, xs, ys, xa, ya, r: real; Begin Init('acceleration', 'user', 3); // Опрашиваем 3 датчика xs:=0; ys:=0; // Начальная скорость мячика r:=30; // Радиус шарика x:=0; y:=0; // Начальные кординаты repeat // бесконечный цикл xa := -get_value(0)*1.0 / 10000.0; // запрашиваем данные у акселерометра ya := get_value(1)*1.0 / 10000.0; SetColor(255, 255, 255); FillRect(0, 0, GetWidth, GetHeight); // Очистка экрана SetColor(0, 0, 0); ys := ys + ya * 9.82; xs := xs + xa * 9.82; // 9.82 - притяжение ys := ys - ys * 0.01; xs := xs - xs * 0.01; // Немного матана if(y + ys < 0.0) then begin ys := -(ys - ys * 0.15); // 0.15 - это коэффициэнт упругости мячика y := 0.0; end else if(y + ys > GetHeight - r) then begin ys := -(ys - ys * 0.15); y := GetHeight - r; end else y := y+ys; if(x + xs < 0.0) then begin xs := -(xs - xs * 0.15); x := 0.0; end else if(x + xs >= GetWidth - r) then begin xs := -(xs - xs * 0.15); x := GetWidth - r; end else x := x+xs; FillEllipse(Trunc(x), Trunc(y), Trunc(r), Trunc(r)); // Рисуем мячик Repaint; // Перерисовка экрана until false; End.
Таким образом, можно получать информацию практически из любого открытого датчика телефона.
Если у вас есть другие интересные датчики обязательно попробуйте поопрашивать их.
Последний раз редактировалось ViNT, 04.11.2009 в 19:11.
|
(Offline)
|
|
Эти 7 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
|
|
02.11.2009, 17:09
|
#2
|
Знающий
Регистрация: 21.07.2009
Адрес: Украина
Сообщений: 219
Написано 44 полезных сообщений (для 78 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Идём к iPhone играм
_________________
Sony ericsson W710 - есть акселерометр (о Idou и говорить не хочу)
Последний раз редактировалось ViNT, 04.11.2009 в 19:13.
|
(Offline)
|
|
02.11.2009, 19:27
|
#3
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Спасибо большое, odd!
На Nokia 5800 пока не удалось заставить работать тестовый пример. Пытаюсь докопаться до истины.
Установка плагина для поддержки JSR256 не помогла: http://www.forum.nokia.com/info/sw.n...r_s60_5_0.html
Upd. Всё работает. Осталось выяснить, работало ли до установки плагина =)
С нетерпением жду либы с возможностью обращения к другим устройствам. Ещё раз спасибо! =)
А возможно ли реализовать обработку случая, когда нет поддержки акселерометра, чтобы приложение не вылетало?
Nokia E61, например, ругается на необработанное исключение.
Последний раз редактировалось ViNT, 04.11.2009 в 19:14.
|
(Offline)
|
|
12.11.2009, 11:38
|
#4
|
Оператор ЭВМ
Регистрация: 10.07.2009
Сообщений: 41
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Nokia N82 пример не завелся, пишет "Необработаное исключение". Просьба Bruteo выложить пример, который завелся на 5800
|
(Offline)
|
|
12.11.2009, 14:40
|
#5
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Ответ: 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.
|
(Offline)
|
|
12.11.2009, 15:04
|
#6
|
Оператор ЭВМ
Регистрация: 10.07.2009
Сообщений: 41
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: 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.
Все равно не пошло
|
(Offline)
|
|
12.11.2009, 19:16
|
#7
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Попробуй перед запуском Init и остальным выяснить версию jsr256.
Если там возвращается null, то нечего и соваться делать всё остальное.
|
(Offline)
|
|
13.11.2009, 11:08
|
#8
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Возможно ли узнать соостояние заряда батареи на обычном телефоне? Например: 6233i
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
13.11.2009, 16:34
|
#9
|
Оператор ЭВМ
Регистрация: 10.07.2009
Сообщений: 41
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Сообщение от ArtikZ
Возможно ли узнать соостояние заряда батареи на обычном телефоне? Например: 6233i
|
Если после запроса сансоров, он там будет, то думаю да
|
(Offline)
|
|
14.11.2009, 17:16
|
#10
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Пробовал получить список на нок6233i и симС65.. Виснет прога в начале... (и get_version не помогает)
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
14.11.2009, 17:30
|
#11
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Сообщение от ArtikZ
Пробовал получить список на нок6233i и симС65.. Виснет прога в начале... (и get_version не помогает)
|
Думаю на этих телефонах нет поддержки сенсоров.
|
(Offline)
|
|
14.11.2009, 17:47
|
#12
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Думаю на этих телефонах нет поддержки сенсоров.
|
Вот поэтому и спрашивал, возможно ли узнать заряд батареи на таких телефонах?!
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.11.2009, 03:17
|
#13
|
Оператор ЭВМ
Регистрация: 10.07.2009
Сообщений: 41
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Следовательно нет. Да и вообще предложение отписываться о моделях телефонов, на которых либа смогла получить информацию о сенсорах.
|
(Offline)
|
|
25.11.2009, 18:33
|
#14
|
ПроЭктировщик
Регистрация: 22.11.2009
Сообщений: 137
Написано 8 полезных сообщений (для 8 пользователей)
|
Ответ: 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.
Остальные ф-ции - аналогично.
|
(Offline)
|
|
26.11.2009, 18:50
|
#15
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_jsr256 - Работа с сенсорами телефона
Мда. Как показывает практика, лучше не вызывать даже get_version, иначе такая проверка может быть фатальной для телефонов, с отсутсвием сенсоров.
Лучше проверять вручную с помощью вызова
sensor_version := GetProperty('"microedition.sensor.version');
Ну а потом уже в зависимости от того, какую версию получим уже делать выводы,
стоит ли дальше делать инициализацию библиотеки или совсем не стоит.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:13.
|