【问题标题】:Detect touch screen in Blackberry?在黑莓中检测触摸屏?
【发布时间】:2015-10-18 10:03:49
【问题描述】:

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

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

【问题讨论】:

    标签: java blackberry touchscreen


    【解决方案1】:

    自 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

    【讨论】:

    • 您好 Rupak,非常感谢您提供了这么好的解释。这对我作为知识库非常有用。我还没有在我的应用程序中使用任何预处理器类型代码。但是在这个应用程序中,我正在使用 5.0 + 操作系统,因为我也在使用本地数据库。所以我只是使用了 TouchScreen 类的 isSupported() 。再次感谢您的帮助。:)
    【解决方案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 特性,所以它的实现有点不稳定。

    【讨论】:

    • 非常感谢 Nate,我刚刚使用了 isSupported() 方法。这使我的应用程序对于触摸和非触摸设备都非常灵活。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多