检测黑莓手机中的触摸屏?

时间:2012-05-26 13:42:16

标签: java blackberry touchscreen

我正在开发包含缩放捏合功能的Blackberry应用程序,但此功能适用于触摸屏设备。我的应用程序也适用于曲线类型的设备。

如果“我可以通过编程方式检测设备是否为触摸屏”,请告诉我。因此,我可以使我的应用程序灵活适用于这两种类型。

2 个答案:

答案 0 :(得分:3)

自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

答案 1 :(得分:2)

如果您只需要支持OS 4.7+设备,则无需使用预处理器。您可以使用以下方法以编程方式测试触摸屏:

boolean isTouch = TouchScreen.isSupported();

Rupak在他的回答中提出的建议可能还不够(只需添加触摸处理代码,非触摸设备将忽略该代码)。在您的情况下,如果您想支持缩放功能,您可能需要主动检测非触摸设备(使用上面的代码),并选择添加新的缩放ButtonField,甚至不显示触摸支持捏手势的设备。如果你不这样做,那么非触控设备将无法缩放,或者触摸设备会使其屏幕上出现不必要的按钮。

但是,TouchScreen API仅适用于4.7+。如果您需要在较旧的OS版本上运行相同的代码,也可以使用其他方法:

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之前的OS版本上编译的代码。

注意:这个有点令人困惑的“双重负面”预处理器逻辑并非错误。这就像是支持BlackBerry启用的IDE中稍微不同的预处理器方式(例如JDE,Eclipse,Netbeans)处理预处理。遗憾的是,预处理不是标准化的J2ME功能,因此它的实现有点不稳定。