我正在开发一个包含缩放捏合功能的黑莓应用程序,但此功能适用于触摸屏设备。我的应用程序也适用于曲线类型的设备。
请让我知道“我是否可以通过编程方式检测设备是否为触摸屏”,以便我可以使我的应用程序对这两种类型都灵活。
我正在开发一个包含缩放捏合功能的黑莓应用程序,但此功能适用于触摸屏设备。我的应用程序也适用于曲线类型的设备。
请让我知道“我是否可以通过编程方式检测设备是否为触摸屏”,以便我可以使我的应用程序对这两种类型都灵活。
自 BlackBerry API 4.7.0 起添加了触控支持。检查TouchEvent类的文档。
因此,如果您正在为在 4.7.0 或更高版本上运行的设备构建应用程序,则无需执行任何操作。您可以编写与触摸事件相关的任务,应用程序将在触摸和非触摸设备上运行。对于非触摸设备,与触摸事件相关的代码将不会执行。
但是,如果您需要支持运行在 4.7.0 以下的旧设备,则需要使用预处理器指令。
尝试以下链接以在您的应用程序上使用预处理器指令:
其他相关链接:
如果您只需要支持 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 特性,所以它的实现有点不稳定。