首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扫描可用wifi,检测特定最强的Wifi SSID以启动XML活动布局。

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

Stack Overflow用户
提问于 2012-12-17 18:47:01
回答 1查看 2.7K关注 0票数 1

我需要通过扫描最强大的Wifi来启动一个活动来定位我当前的位置。我只想找到那栋楼里的三个地方。因此,如果我目前在任何这些地点附近,我将点击一个按钮,以扫描最强的可用Wifi启动一个活动。

  1. 我要扫描一栋楼里可用的Wifi。
  2. 得到三个最强的信号。
  3. 然后检测这3种最强信号的SSID是否与我想要定位的特定SSID相同。
  4. 如果我的SSID是最强的3种信号之一,那么应用程序将启动一个xml布局活动,

到目前为止,我已经有了扫描最强可用的Wifi的编码。但是当检测到最强的特定的Wifi SSID时,我不知道如何启动一个活动。我不需要有关Wifi的信息,只是为了启动我的活动布局,有我的信息。

目前,我正在使用下面的代码来扫描来自这里的最强的Wifi信号

WiFiDemo.java

代码语言:javascript
复制
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

代码语言:javascript
复制
      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);
      }

    }
EN

回答 1

Stack Overflow用户

发布于 2012-12-17 22:25:30

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

启动onReceive BroadcastReceiver中的活动

代码语言:javascript
复制
 @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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13920185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档