アクティビティを開始するために利用可能な最強の Wi-Fi をスキャンして、建物内の現在の場所を特定する必要があります。その建物内の 3 か所だけを特定したい。そのため、現在これらの場所の近くにいる場合は、ボタンをクリックして利用可能な最も強力な Wifi をスキャンし、アクティビティを開始します。
- 建物内で利用可能な Wi-Fi をスキャンする必要があります。
- 3 つの最強の信号を取得します。
- 次に、これら 3 つの最も強い信号の SSID のいずれかが、特定したい特定の SSID と同じかどうかを検出します。
- 私の SSID が最も強い 3 つの信号の 1 つである場合、アプリケーションは xml レイアウト アクティビティを起動します。
これまでのところ、利用可能な最強の Wi-Fi をスキャンするためのコーディングを既に行っています。しかし、最も強力な特定の Wifi SSID が検出されたときにアクティビティを開始する方法がわかりません。自分の情報を含むアクティビティ レイアウトを起動するためだけに、Wifi に関する情報は必要ありません。
現時点では、次のコードを使用して、ここから取得した最強の Wifi 信号をスキャンしています。
WiFiDemo.java
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);
}
}