Итак, у меня возникла та же проблема, что и у вас, когда я захотел обновить значение RSSI по мере того, как ходил пользователь, и т. Д., И я не смог ее решить с помощью RSSI_CHANGED_ACTION.
Как и ваша проблема, мой обратный вызов не будет вызван правильно. Как ни странно, он был вызван только один раз, когда была создана активность, и больше никогда.
Мой обходной путь
В вашем onCreate () зарегистрируйте обратный вызов для SCAN_RESULTS_AVAILABLE_ACTION. Затем вызовите WifiManager.startScan ().
Теперь в вашем обратном вызове выполните:
WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE);
int newRssi = wifiMan.getConnectionInfo().getRssi();
wifiMan.startScan();
Теперь у вас есть цикл, в котором обратный вызов запускает сканирование, получает результаты и запускает другое сканирование.
Это брутто и потребляет много энергии, однако, вы можете наблюдать за изменениями значений RSSI при ходьбе.
Полный код
(обратите внимание, что я использую onResume и onPause для регистрации и отмены регистрации, поэтому он будет сканировать только несколько раз, например, разряженную батарею, когда активность отображается на экране)
@Override
public void onResume() {
super.onResume();
//Note: Not using RSSI_CHANGED_ACTION because it never calls me back.
IntentFilter rssiFilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
this.registerReceiver(myRssiChangeReceiver, rssiFilter);
WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE);
wifiMan.startScan();
}
@Override
public void onPause() {
super.onPause();
this.unregisterReceiver(myRssiChangeReceiver);
}
/**
* Broadcast receiver to update
*/
private BroadcastReceiver myRssiChangeReceiver
= new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE);
wifiMan.startScan();
int newRssi = wifiMan.getConnectionInfo().getRssi();
Toast.makeText(getActivity(), ""+newRssi, Toast.LENGTH_SHORT).show();
}};
Извините, я так опоздал, мне просто нужно было выяснить, что я должен решить вашу проблему: P