【发布时间】:2015-10-18 10:03:49
【问题描述】:
我正在开发一个包含缩放捏合功能的黑莓应用程序,但此功能适用于触摸屏设备。我的应用也可以在曲线类型的设备上运行。
如果“我可以通过编程方式检测设备是否为触摸屏”,请告诉我,以便我可以使我的应用程序对这两种类型都灵活。
【问题讨论】:
标签: java blackberry touchscreen
我正在开发一个包含缩放捏合功能的黑莓应用程序,但此功能适用于触摸屏设备。我的应用也可以在曲线类型的设备上运行。
如果“我可以通过编程方式检测设备是否为触摸屏”,请告诉我,以便我可以使我的应用程序对这两种类型都灵活。
【问题讨论】:
标签: java blackberry touchscreen
自 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?
【讨论】:
如果您只需要支持 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 特性,所以它的实现有点不稳定。
【讨论】: