Java 将Android Wifi扫描结果放入解析数组
我正试图为我就读的大学建立一个无线定位足迹系统。使用附带的代码,我能够通过字符串生成器查看列表中的无线接入点以及与之相关的各种信息(BSSID、信号强度、加密协议等) 最后,我希望包装Java 将Android Wifi扫描结果放入解析数组,java,android,arrays,eclipse,parsing,Java,Android,Arrays,Eclipse,Parsing,我正试图为我就读的大学建立一个无线定位足迹系统。使用附带的代码,我能够通过字符串生成器查看列表中的无线接入点以及与之相关的各种信息(BSSID、信号强度、加密协议等) 最后,我希望包装getScanResults()数据到一个数组中,并输出解析的信息,这样我就只有在外部服务器上查询数据库所需的相关信息。(即BSSID和信号强度)如何实现 package com.example.wifiscanner4; import java.util.List; import android.app.Ac
getScanResults()编码>数据到一个数组中,并输出解析的信息,这样我就只有在外部服务器上查询数据库所需的相关信息。(即BSSID和信号强度)如何实现
package com.example.wifiscanner4;
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.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Button;
public class WifiTester extends Activity {
TextView mainText;
WifiManager mainWifi;
WifiReceiver receiverWifi;
List<ScanResult> wifiList;
StringBuilder sb = new StringBuilder();
Button scan;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wifi_tester);
//enable wifi on application start
WifiManager wifiManager = (WifiManager) getBaseContext()
.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);
mainText = (TextView) findViewById(R.id.mainText);
mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
receiverWifi = new WifiReceiver();
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
mainWifi.startScan();
mainText.setText("Starting Scan...");
scan = (Button)findViewById(R.id.scan);
}
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "Refresh");
return super.onCreateOptionsMenu(menu);
}
public boolean onMenuItemSelected(int featureId, MenuItem item) {
mainWifi.startScan();
mainText.setText("Starting Scan");
return super.onMenuItemSelected(featureId, item);
}
//protected void onClick(int featureId, MenuItem item) {
// mainWifi.startScan();
// mainText.setText("Starting Scan");
// return super.onMenuItemSelected(featureId, item);
// }
protected void onPause() {
unregisterReceiver(receiverWifi);
super.onPause();
}
protected void onResume() {
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
class WifiReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
sb = new StringBuilder();
wifiList = mainWifi.getScanResults();
for(int i = 0; i < wifiList.size(); i++){
sb.append(new Integer(i+1).toString() + ".");
sb.append((wifiList.get(i)).toString());
sb.append("\\n");
}
mainText.setText(sb);
}
}
// Upon pressing back button to exit app, wireless function set to disable
public boolean onKeyDown(int keyCode, KeyEvent event){ if(keyCode == KeyEvent.KEYCODE_BACK)
{
WifiManager wifiManager = (WifiManager) getBaseContext()
.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(false);
this.finish();
}
return super.onKeyDown(keyCode, event);
}
}
package com.example.wifiscanner4;
导入java.util.List;
导入android.app.Activity;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.net.wifi.ScanResult;
导入android.net.wifi.WifiManager;
导入android.os.Bundle;
导入android.view.KeyEvent;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.TextView;
导入android.widget.Button;
公共类WifiTester扩展活动{
文本视图主文本;
WifiManager mainWifi;
无线接收器接收器;
列表wifiList;
StringBuilder sb=新的StringBuilder();
按钮扫描;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u wifi\u测试器);
//在应用程序启动时启用wifi
WifiManager WifiManager=(WifiManager)getBaseContext()
.getSystemService(Context.WIFI_服务);
wifiManager.setWifiEnabled(true);
mainText=(TextView)findViewById(R.id.mainText);
mainWifi=(WifiManager)getSystemService(Context.WIFI\u SERVICE);
receiverWifi=新WifiReceiver();
registerReceiver(接收方WiFi,新的意向过滤器(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION));
mainWifi.startScan();
setText(“开始扫描…”);
扫描=(按钮)findViewById(R.id.scan);
}
公共布尔onCreateOptions菜单(菜单){
添加(0,0,0,“刷新”);
返回super.onCreateOptions菜单(菜单);
}
公共布尔值onMenuItemSelected(int-featureId,MenuItem项){
mainWifi.startScan();
setText(“开始扫描”);
返回super.onMenuItemSelected(featureId,item);
}
//受保护的void onClick(int featureId,MenuItem项){
//mainWifi.startScan();
//setText(“开始扫描”);
//返回super.onMenuItemSelected(featureId,item);
// }
受保护的void onPause(){
未注册的接收器(接收器);
super.onPause();
}
受保护的void onResume(){
registerReceiver(接收方WiFi,新的意向过滤器(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION));
super.onResume();
}
类WifiReceiver扩展了BroadcastReceiver{
接收时公共无效(上下文c,意图){
sb=新的StringBuilder();
wifiList=mainWifi.getScanResults();
对于(int i=0;i
在接收器代码中,您正在循环扫描结果对象列表。。。但这是通过增加一个整数来实现的。也许可以试试:
for (ScanResult result : getScanResults()) { ... }
这将为您提供一种查询“result”并使用“BSSID”和“level”属性提取数据的方法
有关ScanResult的信息,请参见非常感谢Rich。这正是我所做的,将字符串格式设置为“sb.append(string.format”(“SSID:%s,BSSID:%s,RSSI:%s dBm”,result.SSID,result.BSSID,result.level));”但是,我现在需要将这些数据发布到MySQL数据库进行查询。我应该重新发布我的新代码还是开始一个新的问题线程?