Android 正在等待至少获取10个PhoneStateListener[监听信号强度]样本
目前我正在编写一个服务,它必须考虑用户移动设备的信号强度 为此,我为服务实现了一个内部类(比如myPhoneStateListener),它扩展了PhoneStateListener,通过重写onSignalStrengthChanged方法,我可以成功地读取信号强度值(从getGsmSignalStrength()方法) 请注意,TelephonyManager实例和侦听器是在ServiceOnCreate方法中初始化的 问题是,我不喜欢在Signals Strength Changed body中获得的第一个值作为信号强度值 我想要实现的是以某种方式等待PhoneStateListener,并确保侦听器至少生成了10个样本,然后将最后的信号强度保存为有效值 请注意,目前我正在读取ServiceOnStartCommand方法中的值 为此,我尝试在服务类中定义一个局部变量(作为计数器),每次调用OnSignalStrengthChanged时,它都会递增1。另一方面,在onStartCommand中,我将等待并检查变量是否达到10:Android 正在等待至少获取10个PhoneStateListener[监听信号强度]样本,android,multithreading,wait,Android,Multithreading,Wait,目前我正在编写一个服务,它必须考虑用户移动设备的信号强度 为此,我为服务实现了一个内部类(比如myPhoneStateListener),它扩展了PhoneStateListener,通过重写onSignalStrengthChanged方法,我可以成功地读取信号强度值(从getGsmSignalStrength()方法) 请注意,TelephonyManager实例和侦听器是在ServiceOnCreate方法中初始化的 问题是,我不喜欢在Signals Strength Changed bo
while ( m_nSignalStrength_Count < 10 )
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
while(信号强度计数<10)
{
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
但是,当我在调试模式下检查时,变量根本没有改变。
while(…)sleep()代码>糟糕的想法。。。只需在调用某个方法(或在while()
之后的代码)时,从onSignalStrengthChanged
调用该方法即可。。。不要在onStartCommand
…Selvin中等待,谢谢您的回复。听起来很棒。但问题是,如果我不等待OnStartCommand,那么OnStartCommand方法将在不获取任何信号强度值的情况下执行。例如,因为PhoneStateListener从来没有足够的时间获取OnStartCommand执行时间范围内的所有样本。所以您有这样的情况吗?是的:)这和我在代码里写的差不多。唯一的区别是监听器实际上是在ServiceOnCreate中初始化的。但是你知道其余的,所以你知道。。您可能需要采集20个样本,而不是10个,但您无法保证信号强度数据是否及时反馈给服务部门。我实际上是指OnStartCommand方法。因为此方法将在结束时调用stopSelf()停止服务。不知何故,我需要坚持当前的逻辑,我的意思是服务必须在OnStartCommand结束时销毁。为什么不尝试在(…)sleep()中调用stopSelf()
代码>糟糕的想法。。。只需在调用某个方法(或在while()
之后的代码)时,从onSignalStrengthChanged
调用该方法即可。。。不要在onStartCommand
…Selvin中等待,谢谢您的回复。听起来很棒。但问题是,如果我不等待OnStartCommand,那么OnStartCommand方法将在不获取任何信号强度值的情况下执行。例如,因为PhoneStateListener从来没有足够的时间获取OnStartCommand执行时间范围内的所有样本。所以您有这样的情况吗?是的:)这和我在代码里写的差不多。唯一的区别是监听器实际上是在ServiceOnCreate中初始化的。但是你知道其余的,所以你知道。。您可能需要采集20个样本,而不是10个,但您无法保证信号强度数据是否及时反馈给服务部门。我实际上是指OnStartCommand方法。因为此方法将在结束时调用stopSelf()停止服务。不知何故,我需要坚持当前的逻辑,我的意思是服务必须在OnStartCommand结束时销毁。为什么不尝试在(…)sleep()中调用stopSelf()
代码>糟糕的想法。。。只需在调用某个方法(或在while()
之后的代码)时,从onSignalStrengthChanged
调用该方法即可。。。不要在onStartCommand
…Selvin中等待,谢谢您的回复。听起来很棒。但问题是,如果我不等待OnStartCommand,那么OnStartCommand方法将在不获取任何信号强度值的情况下执行。例如,因为PhoneStateListener从来没有足够的时间获取OnStartCommand执行时间范围内的所有样本。所以您有这样的情况吗?是的:)这和我在代码里写的差不多。唯一的区别是监听器实际上是在ServiceOnCreate中初始化的。但是你知道其余的,所以你知道。。您可能需要采集20个样本,而不是10个,但您无法保证信号强度数据是否及时反馈给服务部门。我实际上是指OnStartCommand方法。因为此方法将在结束时调用stopSelf()停止服务。不知何故,我需要坚持当前的逻辑,我的意思是服务必须在OnStartCommand结束时销毁。为什么不尝试在DissableColgatingofSignalData
中调用stopSelf()
?