2011-09-05 32 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

顺便说一句,你如何检查是否有锁定状态? –