Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在等待至少获取10个PhoneStateListener[监听信号强度]样本_Android_Multithreading_Wait - Fatal编程技术网

Android 正在等待至少获取10个PhoneStateListener[监听信号强度]样本

Android 正在等待至少获取10个PhoneStateListener[监听信号强度]样本,android,multithreading,wait,Android,Multithreading,Wait,目前我正在编写一个服务,它必须考虑用户移动设备的信号强度 为此,我为服务实现了一个内部类(比如myPhoneStateListener),它扩展了PhoneStateListener,通过重写onSignalStrengthChanged方法,我可以成功地读取信号强度值(从getGsmSignalStrength()方法) 请注意,TelephonyManager实例和侦听器是在ServiceOnCreate方法中初始化的 问题是,我不喜欢在Signals Strength Changed bo

目前我正在编写一个服务,它必须考虑用户移动设备的信号强度

为此,我为服务实现了一个内部类(比如myPhoneStateListener),它扩展了PhoneStateListener,通过重写onSignalStrengthChanged方法,我可以成功地读取信号强度值(从getGsmSignalStrength()方法)

请注意,TelephonyManager实例和侦听器是在ServiceOnCreate方法中初始化的

问题是,我不喜欢在Signals Strength Changed body中获得的第一个值作为信号强度值

我想要实现的是以某种方式等待PhoneStateListener,并确保侦听器至少生成了10个样本,然后将最后的信号强度保存为有效值

请注意,目前我正在读取ServiceOnStartCommand方法中的值

为此,我尝试在服务类中定义一个局部变量(作为计数器),每次调用OnSignalStrengthChanged时,它都会递增1。另一方面,在onStartCommand中,我将等待并检查变量是否达到10:

        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()