2012-05-26 2 views
1

Я работаю над приложением Blackberry, которое включает функции масштабирования Zoom, но эта функциональность работает в устройствах с сенсорным экраном. Мое приложение будет работать и на типах кривых.Обнаружение сенсорного экрана в Blackberry?

Пожалуйста, дайте мне знать, если «я могу программно определить, если устройство является сенсорным экраном или нет», поэтому я могу сделать свое приложение гибким для обоих типов.

ответ

2

Если вам нужно только поддерживать OS 4.7+ устройства, то вам не нужно использовать препроцессор. Вы можете программно проверить на сенсорном экране с этим:

boolean isTouch = TouchScreen.isSupported(); 

Что Rupak предложил в своем ответе не может быть достаточно (просто добавить сенсорный код обработки, который будет игнорироваться для не сенсорных устройств). В вашем случае, если вы хотите поддерживать функцию масштабирования, вам может потребоваться активное обнаружение устройства без касания (с помощью кода выше) и выберите добавить новый зум ButtonField, который даже не отображается на сенсорных устройствах, которые делают поддерживать жест щепотки. Если вы этого не сделаете, либо устройства без касания не смогут масштабировать, либо сенсорные устройства будут иметь свои экраны, загроможденные ненужной кнопкой.

Но, TouchScreen API предназначен только для 4.7+. Если вам необходимо запустить тот же код на более старые версии ОС, тоже, этот другой метод может быть использован:

boolean isTouch = (new Canvas(){protected void paint(Graphics graphics){}}).hasPointerEvents(); 

Моих приложения в основном до сих пор поддерживают 4.5+, которые не могут даже компилировать сенсорного код обработки. Поэтому я обычно полагаюсь на этот макрос препроцессора, чтобы выборочно компилировать другой код.Во-первых, в верхней части файла

//#preprocess 

Затем, в любом месте внутри файла:

//#ifndef TOUCH_SCREEN 
/* 
//#endif 

// code only for touch devices: 
import net.rim.device.api.ui.TouchEvent; 

//#ifndef TOUCH_SCREEN 
*/ 
//#endif 

А потом строит, что я буду производить для развертывания сенсорных устройств, добавить флаг TOUCH_SCREEN препроцессора. Если вы не хотите беспокоиться о загрузке различных пакетов приложений для сенсорных и не сенсорных устройств, просто программно обнаруживайте сенсорные экраны с кодом Java (isTouch) и используйте препроцессор только для удалите код, который не будет компилироваться версии до версии 4.7 ОС.

Примечание: это несколько запутанная логика препроцессора с «двойным отрицательным» не является ошибкой. Это похоже на то, что препроцессоры в интегрированных с BlackBerry IDE (например, JDE, Eclipse, Netbeans) обрабатывают препроцессорную обработку. К сожалению, предварительная обработка не является стандартизированной функцией J2ME, поэтому ее реализация немного шелушащаяся.

+0

Thanx alot Nate, я просто использовал метод isSupported(). Это делает мое приложение гибким для сенсорных и сенсорных устройств. –

3

Поддержка Touch была добавлена ​​с BlackBerry API 4.7.0. Проверьте документацию класса TouchEvent.

Так что если вы создаете приложение для устройств, работающих на 4.7.0 или новее, вам ничего не нужно делать. Вы можете запрограммировать задачу, связанную с событием, и приложение будет работать как на сенсорных, так и на сенсорных устройствах. Для устройств без касания код, связанный с событием касания, не будет выполнен.

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

Попробуйте следующую ссылку для использования директивы препроцессора на вас приложения:

Coding for Multiple Blackberry Devices - Using Preprocessor Directives in Eclipse

Другие ссылки по теме:

Create preprocessor directives for a workspace

Specifying preprocessor directives

Preprocessor directives supported by the RIM compiler

Using preprocessor directives in BlackBerry JDE plugin for eclipse?

How To - Use the preprocessor in BlackBerry JDE

+0

Здравствуйте, Rupak, спасибо за такое большое объяснение. это очень полезно для меня как база знаний. Я еще не использовал коды кодов препроцессора в своих приложениях. но здесь, в этом приложении, я работаю над 5.0 + OS, поскольку я тоже использую локальную базу данных. Поэтому я просто использовал isSupported() класса TouchScreen. Agains thanxx для справки. :) –