Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Библиотеки

Ответ
 
Опции темы
Старый 02.11.2009, 16:56   #1
odd
Мастер
 
Аватар для odd
 
Регистрация: 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     
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 если подключено или отключено зарядное устройство.

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

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
Таким образом, можно получать информацию практически из любого открытого датчика телефона.
Если у вас есть другие интересные датчики обязательно попробуйте поопрашивать их.
Вложения
Тип файла: zip Lib_jsr256.zip (2.0 Кб, 1237 просмотров)

Последний раз редактировалось ViNT, 04.11.2009 в 19:11.
(Offline)
 
Ответить с цитированием
Эти 7 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
Bruteo (02.11.2009), DIMMON4IK (02.11.2009), Felix KoT (07.04.2010), is.SarCasm (09.07.2010), Skythrone (03.11.2009), Tadeus (04.11.2009), ViNT (02.11.2009)
Старый 02.11.2009, 17:09   #2
DIMMON4IK
Знающий
 
Аватар для DIMMON4IK
 
Регистрация: 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
Bruteo
ПроЭктировщик
 
Регистрация: 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
<-TzX->
Оператор ЭВМ
 
Аватар для <-TzX->
 
Регистрация: 10.07.2009
Сообщений: 41
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Lib_jsr256 - Работа с сенсорами телефона

Nokia N82 пример не завелся, пишет "Необработаное исключение". Просьба Bruteo выложить пример, который завелся на 5800
(Offline)
 
Ответить с цитированием
Старый 12.11.2009, 14:40   #5
Bruteo
ПроЭктировщик
 
Регистрация: 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
<-TzX->
Оператор ЭВМ
 
Аватар для <-TzX->
 
Регистрация: 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
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Lib_jsr256 - Работа с сенсорами телефона

Попробуй перед запуском Init и остальным выяснить версию jsr256.
Если там возвращается null, то нечего и соваться делать всё остальное.
(Offline)
 
Ответить с цитированием
Старый 13.11.2009, 11:08   #8
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: Lib_jsr256 - Работа с сенсорами телефона

Возможно ли узнать соостояние заряда батареи на обычном телефоне? Например: 6233i
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 13.11.2009, 16:34   #9
<-TzX->
Оператор ЭВМ
 
Аватар для <-TzX->
 
Регистрация: 10.07.2009
Сообщений: 41
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Lib_jsr256 - Работа с сенсорами телефона

Сообщение от ArtikZ Посмотреть сообщение
Возможно ли узнать соостояние заряда батареи на обычном телефоне? Например: 6233i
Если после запроса сансоров, он там будет, то думаю да
(Offline)
 
Ответить с цитированием
Старый 14.11.2009, 17:16   #10
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: Lib_jsr256 - Работа с сенсорами телефона

Пробовал получить список на нок6233i и симС65.. Виснет прога в начале... (и get_version не помогает)
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 14.11.2009, 17:30   #11
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Lib_jsr256 - Работа с сенсорами телефона

Сообщение от ArtikZ Посмотреть сообщение
Пробовал получить список на нок6233i и симС65.. Виснет прога в начале... (и get_version не помогает)
Думаю на этих телефонах нет поддержки сенсоров.
(Offline)
 
Ответить с цитированием
Старый 14.11.2009, 17:47   #12
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: Lib_jsr256 - Работа с сенсорами телефона

Думаю на этих телефонах нет поддержки сенсоров.
Вот поэтому и спрашивал, возможно ли узнать заряд батареи на таких телефонах?!
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Tadeus (15.07.2010)
Старый 16.11.2009, 03:17   #13
<-TzX->
Оператор ЭВМ
 
Аватар для <-TzX->
 
Регистрация: 10.07.2009
Сообщений: 41
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Lib_jsr256 - Работа с сенсорами телефона

Следовательно нет. Да и вообще предложение отписываться о моделях телефонов, на которых либа смогла получить информацию о сенсорах.
(Offline)
 
Ответить с цитированием
Старый 25.11.2009, 18:33   #14
IDOL 1234
ПроЭктировщик
 
Аватар для IDOL 1234
 
Регистрация: 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
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Lib_jsr256 - Работа с сенсорами телефона

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

Лучше проверять вручную с помощью вызова
sensor_version := GetProperty('"microedition.sensor.version'); 
Ну а потом уже в зависимости от того, какую версию получим уже делать выводы,
стоит ли дальше делать инициализацию библиотеки или совсем не стоит.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с софт-клавишами телефона Trazzy Основной форум 1 21.08.2009 13:21
IMEI телефона GRAY_WOLF FAQ 2 19.01.2009 18:19
Получение собственного номера телефона и т.п. ARV Основной форум 11 27.02.2008 08:08
Получить ноиер телефона из контактов сохраненных в телефоне Kurdt JAVA Micro Edition 4 25.07.2007 19:00


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com