Java 扫描可用的wifi,检测特定的wifi SSID以启动XML活动布局
我需要通过扫描最强的可用Wifi来定位我在大楼中的当前位置,以启动活动。我只想在那栋楼里找到三个地方。因此,如果我目前靠近这些地点中的任何一个,我将单击一个按钮扫描可用的最强Wifi以启动活动 我需要扫描建筑物内可用的Wifi。 得到3个最强的信号。 然后检测这3个最强信号的SSID是否与我要定位的特定SSID相同。 如果我的SSID是最强的3个信号之一,那么应用程序将启动xml布局活动, 到目前为止,我已经有了扫描最强可用Wifi的编码。但我不知道在检测到最强的特定Wifi SSID时如何启动活动。我不需要有关Wifi的信息,只需要启动包含我信息的活动布局 目前,我正在使用以下代码扫描我从中获得的最强Wifi信号: WiFiDemo.javaJava 扫描可用的wifi,检测特定的wifi SSID以启动XML活动布局,java,android,networking,wifi,Java,Android,Networking,Wifi,我需要通过扫描最强的可用Wifi来定位我在大楼中的当前位置,以启动活动。我只想在那栋楼里找到三个地方。因此,如果我目前靠近这些地点中的任何一个,我将单击一个按钮扫描可用的最强Wifi以启动活动 我需要扫描建筑物内可用的Wifi。 得到3个最强的信号。 然后检测这3个最强信号的SSID是否与我要定位的特定SSID相同。 如果我的SSID是最强的3个信号之一,那么应用程序将启动xml布局活动, 到目前为止,我已经有了扫描最强可用Wifi的编码。但我不知道在检测到最强的特定Wifi SSID时如何启动
public class WiFiDemo extends Activity implements OnClickListener {
private static final String TAG = "WiFiDemo";
WifiManager wifi;
BroadcastReceiver receiver;
TextView textStatus;
Button buttonScan;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Setup UI
textStatus = (TextView) findViewById(R.id.textStatus);
buttonScan = (Button) findViewById(R.id.buttonScan);
buttonScan.setOnClickListener(this);
// Setup WiFi
wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// Get WiFi status
WifiInfo info = wifi.getConnectionInfo();
textStatus.append("\n\nWiFi Status: " + info.toString());
// List available networks
List<WifiConfiguration> configs = wifi.getConfiguredNetworks();
for (WifiConfiguration config : configs) {
textStatus.append("\n\n" + config.toString());
}
// Register Broadcast Receiver
if (receiver == null)
receiver = new WiFiScanReceiver(this);
registerReceiver(receiver, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
Log.d(TAG, "onCreate()");
}
@Override
public void onStop() {
unregisterReceiver(receiver);
}
public void onClick(View view) {
Toast.makeText(this, "On Click Clicked. Toast to that!!!",
Toast.LENGTH_LONG).show();
if (view.getId() == R.id.buttonScan) {
Log.d(TAG, "onClick() wifi.startScan()");
wifi.startScan();
}
} }
WiFiScanReceiver.java
public class WiFiScanReceiver extends BroadcastReceiver {
private static final String TAG = "WiFiScanReceiver";
WiFiDemo wifiDemo;
public WiFiScanReceiver(WiFiDemo wifiDemo) {
super();
this.wifiDemo = wifiDemo;
}
@Override
public void onReceive(Context c, Intent intent) {
List<ScanResult> results = wifiDemo.wifi.getScanResults();
ScanResult bestSignal = null;
for (ScanResult result : results) {
if (bestSignal == null
|| WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0)
bestSignal = result;
}
String message = String.format("%s networks found. %s is the strongest.",
results.size(), bestSignal.SSID);
Toast.makeText(wifiDemo, message, Toast.LENGTH_LONG).show();
Log.d(TAG, "onReceive() message: " + message);
}
}
您只需要从onReceive开始您的活动。除非我不理解你的问题,否则你只需要启动你的活动。 因为你的接收者的onReceive上有上下文,所以你只需要启动触觉 别忘了在清单中为它定义一个合适的过滤器。
检测到的最强可用wifi不是与检测到的最强wifi ssid相同吗???换句话说,你的解决方案不是已经正确了吗?是的。但我想检测我当前是否靠近特定的wifi接入点来定位我的位置。因此,我需要检测最强的wifi SSID是否与我自己的特定wifi SSID相同。
@Override
public void onReceive(Context context, Intent intent) {
//start activity
Intent i = new Intent();
i.setClassName("com.test", "com.test.MainActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}