Библиотека немного доработана. Теперь можно обращаться к любым сенсорам.
Для начала неплохо бы вызвать функцию
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.
Таким образом, можно получать информацию практически из любого открытого датчика телефона.
Если у вас есть другие интересные датчики обязательно попробуйте поопрашивать их.