Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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 WiFi getRssi在屏幕关闭时停止工作_Android_Android Wifi_Android Wake Lock - Fatal编程技术网

Android WiFi getRssi在屏幕关闭时停止工作

Android WiFi getRssi在屏幕关闭时停止工作,android,android-wifi,android-wake-lock,Android,Android Wifi,Android Wake Lock,我正在创建一个具有后台服务的应用程序,该应用程序使用getRssi()方法连续获取WiFi RSSI,并根据值决定它应该做什么 服务运行正常,但是,当屏幕被锁定时,服务停止更新RSSI的值,相反,它会被锁定屏幕之前读取的最后一个值卡住 我试着持有一个部分唤醒锁,但不幸的是它没有效果 在服务的OnStartCommand中,我添加了唤醒锁,如下所示: wifi =(WifiManager)getApplicationContext().getSystemService(WIFI_SERVICE);

我正在创建一个具有后台服务的应用程序,该应用程序使用
getRssi()
方法连续获取WiFi RSSI,并根据值决定它应该做什么

服务运行正常,但是,当屏幕被锁定时,服务停止更新RSSI的值,相反,它会被锁定屏幕之前读取的最后一个值卡住

我试着持有一个
部分唤醒锁
,但不幸的是它没有效果

在服务的
OnStartCommand
中,我添加了唤醒锁,如下所示:

wifi =(WifiManager)getApplicationContext().getSystemService(WIFI_SERVICE);
    PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
            PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyLock");
            wakeLock.acquire();
info = wifi.getConnectionInfo();
            RSSI = info.getRssi();
            System.out.println(RSSI);
我已将唤醒锁定权限添加到清单:

<uses-permission android:name="android.permission.WAKE_LOCK" />

有没有人有过类似的问题


这背后的原因是什么?

您找到解决方案了吗?我也面临同样的问题,但仍然没有问题!请告诉我是否有任何有效的解决方案。不幸的是,我找不到任何解决方案,我甚至尝试扫描wifi并获取连接到的网络的RSSI,但没有成功。对我来说,我找到了一个解决方案,让接入点读取客户端的RSSI,而不是相反,这是可能的,因为我的接入点是ESP8266芯片,如果客户端发送探测请求,你可以获得客户端的RSSI,但是,这意味着你的android设备应该一直在扫描,总而言之,我让接入点读取它从客户端接收的数据包的RSSI。我可能应该提到的另一件事是,不同设备的RSSI值不同,因为它不是实际接收功率,而是一个“指示”,因此每个制造商都以自己的方式实施,没有标准或义务,因此,如果依赖RSSI,您将不会获得非常有用的数据。关于MicroPython,我不确定这一点,但我认为它不会工作,原因与C库相同。ESP芯片在AP模式下工作时可以获得RSSI,但只有在接收到特定帧(即探测请求)时才能获得RSSI。如果您不知道,探测请求是设备(在本例中是您的android设备)扫描wifi网络时发送的特殊帧,因此基本上,如果您的android设备扫描wifi网络并且您的ESP在范围内,ESP可以确定探测请求的RSSI。您找到解决方案了吗?我也面临同样的问题,但仍然没有问题!请告诉我是否有任何有效的解决方案。不幸的是,我找不到任何解决方案,我甚至尝试扫描wifi并获取连接到的网络的RSSI,但没有成功。对我来说,我找到了一个解决方案,让接入点读取客户端的RSSI,而不是相反,这是可能的,因为我的接入点是ESP8266芯片,如果客户端发送探测请求,你可以获得客户端的RSSI,但是,这意味着你的android设备应该一直在扫描,总而言之,我让接入点读取它从客户端接收的数据包的RSSI。我可能应该提到的另一件事是,不同设备的RSSI值不同,因为它不是实际接收功率,而是一个“指示”,因此每个制造商都以自己的方式实施,没有标准或义务,因此,如果依赖RSSI,您将不会获得非常有用的数据。关于MicroPython,我不确定这一点,但我认为它不会工作,原因与C库相同。ESP芯片在AP模式下工作时可以获得RSSI,但只有在接收到特定帧(即探测请求)时才能获得RSSI。如果您不知道,探测请求是设备(在本例中是您的android设备)扫描wifi网络时发送的特殊帧,因此基本上,如果您的android设备扫描wifi网络并且您的ESP在范围内,ESP可以确定探测请求的RSSI。