2011-09-05 45 views
0

我試圖在getSpeed()返回大於20 m/s的值時使用systemLock()來鎖定設備。黑莓手機 - systemLock()不工作

public void locationUpdated(LocationProvider provider, Location location) 
     { 
      if(location.isValid()) 
      { 
       float speed = location.getSpeed(); 

       // Information to be displayed on the device 
       StringBuffer sb = new StringBuffer(); 
       sb.append("\n"); 
       sb.append("Speed : "); 
       sb.append(speed); 
       sb.append(" m/s"); 

       if(speed < 20){ 
        appMan = ApplicationManager.getApplicationManager(); 
        appMan.lockSystem(true); 
       }else{ 

       } 
       MyApp.this.updateLocationScreen(sb.toString()); 
      } 

     } 

我有一個RichTextField,我可以成功地使用.settext()在if/else語句來改變RichTextField的文本,所以我必須使用lockSystem()是錯誤的。

編輯

if(speed > 20 || Double.isNaN(speed)){ 
        requestForeground(); 
        appMan = ApplicationManager.getApplicationManager(); 
        appMan.lockSystem(true); 
       }else{ 

       } 
+0

'lockSystem(true)'只有在設備上設置了密碼時纔有效。要阻止用戶使用設備,推入全局屏幕要簡單得多。 – adwiv

回答

1

從文檔上Location

公共浮動getSpeed()
返回:
當前地面速度以m/s爲 終端或浮動.NaN如果速度未知

在Java中,任何與Float.NaN的比較都將返回false,因此如果您的設備將NaN作爲速度返回,您的鎖定屏幕代碼塊將不會執行。您可能需要將Double.isNaN(speed)添加到您的情況。

+0

我做了如上所示的編輯。對requestForeground()的調用有效,但lockSystem(true)仍然沒有效果 – RapsFan1981

2

附帶對眼睛的第一件事是:

鎖定裝置之後到將getSpeed()返回一個值大於爲20m/s 。

if (speed < 20) { 
    appMan = ApplicationManager.getApplicationManager(); 
    appMan.lockSystem(true); 
} 
+0

嗨,這是一個錯字。謝謝。仍然沒有鎖定。 – RapsFan1981

+0

您是在真實設備上還是在模擬器上測試?我想模擬器可以做一個模擬鎖定設備不好的工作。 –

+0

順便說一句,你如何檢查是否有鎖定狀態? –