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

时间:2012-12-17 18:47:01

标签: java android networking wifi

我需要通过扫描最强的可用Wifi来启动活动,从而在建筑物中找到我当前的位置。我想在那栋楼里只找到3个地方。因此,如果我目前靠近这些位置,我会点击一个按钮扫描最强的可用Wifi以启动活动。

  1. 我需要在建筑物中扫描可用的Wifi。
  2. 获得3个最强信号。
  3. 然后检测这3个最强信号的SSID中是否有任何一个与我想要找到的特定SSID相同。
  4. 如果我的SSID是最强的3个信号之一,那么应用程序将启动xml布局活动,
  5. 到目前为止,我已经有编码来扫描最强大的Wifi。但是,当检测到最强的特定Wifi SSID时,我不知道如何启动活动。我不需要有关Wifi的信息,只需启动包含我信息的活动布局。

    目前我正在使用以下代码来扫描我从here获得的最强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);
          }
    
        }
    

1 个答案:

答案 0 :(得分:0)

您只需要从onReceive开始您的活动。除非我不理解你的问题,否则你只需要解雇你的活动。 由于你的接收器上有上下文onReceive,你只需要startActivity()

Start Activity inside 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