1

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

请让我知道“我是否可以通过编程方式检测设备是否为触摸屏”,以便我可以使我的应用程序对这两种类型都灵活。

4

2 回答 2

3

自 BlackBerry API 4.7.0 起添加了触控支持。检查TouchEvent类的文档。

因此,如果您正在为在 4.7.0 或更高版本上运行的设备构建应用程序,则无需执行任何操作。您可以编写与触摸事件相关的任务,应用程序将在触摸和非触摸设备上运行。对于非触摸设备,与触摸事件相关的代码将不会执行。

但是,如果您需要支持运行在 4.7.0 以下的旧设备,则需要使用预处理器指令。

尝试以下链接以在您的应用程序上使用预处理器指令:

为多个黑莓设备编码 - 在 Eclipse 中使用预处理器指令

其他相关链接:

为工作区创建预处理器指令

指定预处理器指令

RIM 编译器支持的预处理器指令

在 Eclipse 的 BlackBerry JDE 插件中使用预处理器指令?

如何 - 在 BlackBerry JDE 中使用预处理器

于 2012-05-26T15:42:41.030 回答
2

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

boolean isTouch = TouchScreen.isSupported();

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

但是,TouchScreenAPI 仅适用于 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 特性,所以它的实现有点不稳定。

于 2012-05-26T21:16:42.697 回答