自動重新整理擷取wifi訊號強度,android

來源:互聯網
上載者:User

標籤:

我還是挺有必要把這次解決bug的過程記錄下來的。轉自http://fecbob.pixnet.net/blog/post/39322597-android-%3E-wifi-%3E-%E6%8E%83%E6%8F%8F%E9%99%84%E8%BF%91wifi-和http://stackoverflow.com/questions/8717741/application-never-receives-rssi-changed-action。這是我的第一個android程式,對於其中的一些細節原理,還需要再研究。

package com.example.wifi_scan;

import java.util.List;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends Activity {
/** Called when the activity is first created. */
private TextView wifiText;
private WifiManager wifiManager;
private StringBuilder sb;
private List<ScanResult> wifiList;
private WifiReceiver wifiReceiver;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

sb = new StringBuilder();
wifiText = (TextView) findViewById(R.id.wifi);
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifiReceiver = new WifiReceiver();
registerReceiver(wifiReceiver, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
wifiManager.startScan();
wifiText.setText("\nStarting Scan\n");


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "Refresh");
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
wifiManager.startScan();
wifiText.setText("Starting Scan");
return super.onMenuItemSelected(featureId, item);

}

@Override
protected void onPause() {
unregisterReceiver(wifiReceiver);
super.onPause();
}

@Override
protected void onResume() {
registerReceiver(wifiReceiver, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();

WifiManager wifiMan = (WifiManager)getSystemService(Context.WIFI_SERVICE);
wifiMan.startScan();
}

private final class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

WifiManager wifiMan = (WifiManager)getSystemService(Context.WIFI_SERVICE);
wifiMan.startScan();

sb = new StringBuilder();
wifiList = wifiManager.getScanResults();
for (int i = 0; i < wifiList.size(); i++) {
sb.append(new Integer(i + 1).toString() + ".");
sb.append((wifiList.get(i)).toString()).append("\n\n");
}
wifiText.setText(sb.toString());
}
}


}

 

之前其實有挺多網上的代碼是可以採集wifi訊號強度的,但是沒有找到能夠實現重新整理的,所以我也很納悶該怎麼做。然後自己找到一個可以用button按鈕來重新整理的,發現是可以重新整理的,仔細對比了下,發現是有個函數在起作用startScan,但是無論我用timer,handler機制還是用receiver機制都不行,然後看到這篇部落格http://blog.csdn.net/zd_1471278687/article/details/12158367下面的討論,將SCAN_RESULTS_AVAILABLE_ACTION改成了RSSI_CHANGED_ACTION,但是發現狀態還是沒有變,接著我就繼續Google了下wifimanager rssi changed action,然後找到了這個http://stackoverflow.com/questions/8717741/application-never-receives-rssi-changed-action,照著裡面的方法,把receive改了下,發現就可以了!

從這個解決問題的路線,堅定了想法是:可以找人幫忙,但是最終解決問題的永遠是自己!

 

自動重新整理擷取wifi訊號強度,android

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.