2012-05-26 163 views
1

我正在研究包括縮放功能的黑莓應用程序,但此功能適用於觸摸屏設備。我的應用程序也可以在曲線類型的設備上工作。檢測黑莓觸摸屏?

請讓我知道如果「我可以通過編程方式檢測設備是否觸摸屏」,這樣我可以使我的應用程序對這兩種類型都很靈活。

回答

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的功能,所以它的實現是一個小片狀。

+0

感謝名單了很多內特,我只是用則isSupported()方法。這使得我的應用程序對於觸摸和非觸摸設備都很靈活。 –

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

+0

你好Rupak,感謝名單了很多這樣很好的解釋。這對我來說是非常有用的知識庫。我的應用程序中尚未使用任何預處理器類型代碼。但在這個應用程序中,我正在使用5.0 + OS,因爲我也使用本地數據庫。所以我只用了TouchScreen類的isSupported()。 Agains thanxx的幫助。:) –