【问题标题】:Wifi Scanner doesn't work with android nougat (7.0)Wifi 扫描仪不适用于 android nougat (7.0)
【发布时间】:2017-04-27 09:22:16
【问题描述】:

我想在wifi打开时扫描所有wifi,但它不适用于android 7.0,我只有这款手机进行测试(我认为这是一个android版本问题)。

如何解决我的问题?

代码:

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent; 
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle; 
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;



public class DetectWifi extends Activity implements View.OnClickListener
{
  WifiManager wifi;
  ListView lv;
  TextView textStatus;
  Button buttonScan;
  int size = 0;
  List<ScanResult> results;

  String ITEM_KEY = "key";
  ArrayList<HashMap<String, String>> arraylist = new   ArrayList<HashMap<String, String>>();
  SimpleAdapter adapter;

  /* Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.detectwifi_page);

    textStatus = (TextView) findViewById(R.id.textStatus);
    buttonScan = (Button) findViewById(R.id.buttonScan);
    buttonScan.setOnClickListener(this);
    lv = (ListView)findViewById(R.id.list);

    wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    if (wifi.isWifiEnabled() == false)
    {
        Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show();
        wifi.setWifiEnabled(true);
    }
    this.adapter = new SimpleAdapter(DetectWifi.this, arraylist, R.layout.dialog_wifi, new String[] { ITEM_KEY }, new int[] { R.id.list_value });
    lv.setAdapter(this.adapter);

    registerReceiver(new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context c, Intent intent)
        {
            results = wifi.getScanResults();
            size = results.size();
        }
    }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}

public void onClick(View view)
{
    arraylist.clear();
    wifi.startScan();

    Toast.makeText(this, "Scanning...." + size, Toast.LENGTH_SHORT).show();
    try
    {
        size = size - 1;
        while (size >= 0)
        {
            HashMap<String, String> item = new HashMap<String, String>();
            item.put(ITEM_KEY, results.get(size).SSID + "  " + results.get(size).capabilities);

            arraylist.add(item);
            size--;
            adapter.notifyDataSetChanged();
        }
    }
    catch (Exception e)
    { }
 }
}

非常感谢。

【问题讨论】:

标签: java android android-7.0-nougat


【解决方案1】:

对于 Android 7,获取 Wi-Fi 扫描结果需要权限 ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION。您还必须在设备上打开位置信息。

【讨论】:

    【解决方案2】:

    除了启用 WiFi 之外,您还必须启用定位服务才能访问扫描结果。如果您只启用了 WiFi,您将获得一个空的扫描结果列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 2012-08-08
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多