我對android應用程序開發相當新穎。我正在研究一個android應用程序來ping訪問點以訪問其RSSI值來估計用戶的位置。Android:連續掃描所有AP(接入點)
雖然我目前有這個'工作',但我相信在我的實現中有一個錯誤會創建太多的「onReceive()」調用。在應用程序的整個生命週期中,對這個函數的調用量都是線性的。
我將要發佈的代碼的目標是簡單地掃描WiFi接入點,獲取其RSSI值,然後不斷循環。電池壽命不成問題,性能是一個更重要的指標。
MainActivity.java:
Handler handler = new Handler();
final Runnable locationUpdate = new Runnable() {
@Override
public void run() {
getLocation();
//customView.setLocation(getX_pixel(curLocation.getX()), getY_pixel(curLocation.getY()));
//customView.invalidate();
handler.postDelayed(locationUpdate, 1000);
}
};
private void getLocation() {
Context context = getApplicationContext();
WifiScanReceiver wifiReceiver = new WifiScanReceiver();
registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
Log.d("START SCAN CALLED", "");
}
然後在相同的文件中,在onCreate()方法:
handler.post(locationUpdate);
然後,在相同的文件中,onCreate()方法之外:
class WifiScanReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context c, Intent intent) {
WifiManager wifiManager = (WifiManager) c.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> scan = wifiManager.getScanResults();
// Application specific code:
sortScan(scan);
count+= 1;
System.out.println("Count: " + count);
}
}
};
我確認了斜坡/線程問題,因爲當程序到達時我遞增並輸出到控制檯「sortScan(掃描)」,您可以清楚地看到結果呈線性上升。
就像我剛纔說的那樣,我的目的是在第一次掃描完成後立即重新掃描,並在應用程序的整個生命週期中對其進行循環。
任何幫助將不勝感激,謝謝。