Android wifi扫描仪显示无结果或过程缓慢
我编写了一个应用程序来捕获wifi接入点信息。我不明白为什么有时it扫描没有任何结果,而当我在手机设置中关闭和打开wifi时,我可以观察那里的所有接入点。 还有什么方法可以更快地获得wifi扫描的结果?!就像手机在“手机设置”中打开wifi时所做的一样。我将结果指定给一个名为“UMCH_网络”的接入点 谢谢 这是我的.java文件内容:Android wifi扫描仪显示无结果或过程缓慢,android,wifi,android-wifi,wifimanager,Android,Wifi,Android Wifi,Wifimanager,我编写了一个应用程序来捕获wifi接入点信息。我不明白为什么有时it扫描没有任何结果,而当我在手机设置中关闭和打开wifi时,我可以观察那里的所有接入点。 还有什么方法可以更快地获得wifi扫描的结果?!就像手机在“手机设置”中打开wifi时所做的一样。我将结果指定给一个名为“UMCH_网络”的接入点 谢谢 这是我的.java文件内容: package com.example.wps; import java.util.List; import android.app.Activity; i
package com.example.wps;
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.os.Handler;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView mainText;
TextView notifText;
EditText eTxtnumberOfTimes;
EditText eTxtDistance;
WifiManager wifiManager;
WifiReceiver wifiReceiver;
List<ScanResult> wifiList;
StringBuilder sb = new StringBuilder();
Handler handler = new Handler();
String DirectoryName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
notifText = (TextView) findViewById(R.id.txvMain);
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
}
public void ScanAndDraw(View v) {
scanwifi();
}
public void scanwifi() {
wifiReceiver = new WifiReceiver();
registerReceiver(wifiReceiver, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
notifText.setText("Scanning ...");
wifiManager.startScan();
}
class WifiReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
sb = new StringBuilder();
wifiList = wifiManager.getScanResults();
for (ScanResult result : wifiList) {
if (result.SSID.equals("UMCH_Network")) {
sb.append("Distance: " + eTxtDistance.getText().toString()
+ "\t");
sb.append("Number of Times: "
+ eTxtnumberOfTimes.getText().toString() + "\t");
sb.append("Level:\t" + result.level + "\t");
// n=4.48 d0=3meter
sb.append("estimated distance in meter: "
+ (3 * (Math.pow(10, (-result.level - 46) / 44.8)))
+ "\n");
}
notifText.setText(sb);
}
//mainText.setText(sb);
notifText.setText("");
}
}
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "Refresh");
return super.onCreateOptionsMenu(menu);
}
protected void onPause() {
unregisterReceiver(wifiReceiver);
super.onPause();
}
protected void onResume() {
registerReceiver(wifiReceiver, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
public boolean onTouch(View v, MotionEvent mo) {
// float x = mo.getX();
return false;
}
}
package com.example.wps;
导入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.os.Handler;
导入android.view.Menu;
导入android.view.MotionEvent;
导入android.view.view;
导入android.widget.EditText;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
文本视图主文本;
text视图notifText;
编辑文本eTxtnumberOfTimes;
编辑文本eTxtDistance;
WifiManager WifiManager;
WifiReceiver WifiReceiver;
列表wifiList;
StringBuilder sb=新的StringBuilder();
Handler=newhandler();
字符串目录名;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
notifText=(TextView)findViewById(R.id.txvMain);
wifiManager=(wifiManager)getSystemService(Context.WIFI_服务);
}
公共空间扫描和绘制(视图v){
scanwifi();
}
公共无线网络(){
wifiReceiver=新的wifiReceiver();
registerReceiver(wifiReceiver,新意向过滤器(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
notifText.setText(“扫描…”);
wifiManager.startScan();
}
类WifiReceiver扩展了BroadcastReceiver{
接收时公共无效(上下文c,意图){
sb=新的StringBuilder();
wifiList=wifiManager.getScanResults();
用于(扫描结果:wifiList){
if(result.SSID.equals(“UMCH_网络”)){
sb.append(“距离:+eTxtDistance.getText().toString())
+“\t”);
某人追加(“次数:”
+eTxtnumberOfTimes.getText().toString()+“\t”);
sb.append(“Level:\t”+result.Level+“\t”);
//n=4.48 d0=3米
sb.追加(“以米为单位的估计距离:”
+(3*(数学能力(10,(-result.level-46)/44.8)))
+“\n”);
}
notifText.setText(某人);
}
//mainText.setText(sb);
notifText.setText(“”);
}
}
公共布尔onCreateOptions菜单(菜单){
添加(0,0,0,“刷新”);
返回super.onCreateOptions菜单(菜单);
}
受保护的void onPause(){
未注册接收人(wifiReceiver);
super.onPause();
}
受保护的void onResume(){
registerReceiver(wifiReceiver,新意向过滤器(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
公共布尔onTouch(视图v、MotionEvent mo){
//float x=mo.getX();
返回false;
}
}
这是清单文件的内容:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.wps"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="18" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.wps.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
使用此代码,您可以立即显示最近扫描的wifi列表
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
List<ScanResult> apList = wifiManager.getScanResults();
WifiManager WifiManager=(WifiManager)getSystemService(Context.WIFI_服务);
List apList=wifiManager.getScanResults();
我也有同样的问题……我终于找到了解决办法
获取Wifi扫描结果的方法需要GPS处于开启状态并进行粗略定位
文件中的权限
我希望这会有帮助它运行得非常快,但即使我重新启动应用程序,它也不会更新!有没有办法让它更新@nikvsOn立即启动应用程序,您可以使用上述代码显示列表。同时注册广播接收器进行wifi扫描,并在on receive方法中更新列表。这将类似于我以前编写的代码。这是唯一的方法吗?是的,据我所知,这是唯一的方法。如果我遇到任何其他方法,我一定会让你知道。@Hossein Dolatabadi如果需要,请检查我更新的答案。