繁体   English   中英

扫描可用的wifi,检测最强的Wifi SSID以启动XML活动布局

[英]Scanning available wifi, detect specific strongest Wifi SSID to launch an XML activity layout

我需要通过扫描可用的最强大的Wifi来启动活动来定位建筑物中的当前位置。 我只想在那座建筑物中找到3个地方。 因此,如果我当前在这些位置中的任何一个附近,我将单击一个按钮来扫描可用的最强大的Wifi以启动活动。

  1. 我需要扫描建筑物中的可用Wifi。
  2. 获取3个最强的信号。
  3. 然后检测这3个最强信号的SSID是否与我要定位的特定SSID相同。
  4. 如果我的SSID是3个信号中最强的信号之一,则该应用程序将启动xml布局活动,

到目前为止,我已经具有扫描最强大的Wifi的编码。 但是当检测到最强的特定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);
      }

    }

您只需要从onReceive开始活动。 除非我不理解您的问题,否则您只需要激活您的活动即可。 由于您在接收者的onReceive上具有上下文,因此只需要startActivity()

在onReceive BroadcastReceiver内部启动活动

 @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);
    }

不要忘记在清单中为其定义一个适当的过滤器。 http://developer.android.com/reference/android/content/BroadcastReceiver.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM