Android Studio WifiManager

问题描述 投票:1回答:1

我想搜索可用的wifi网络,并在我的应用程序中单击开始按钮时将其显示在列表中,但是我的代码无法找到任何wifi网络。我试图用TextViewToast显示可用网络的数量,但始终显示0

这是我的代码:

public class MainActivity extends AppCompatActivity {

    //Listview
    private ArrayAdapter<String> adapter;
    private ListView list;
    private ArrayList<String> mylist = new ArrayList<String>();
    ListAdapter adapter1;
    TextView tV;

    //Wifi
    private WifiManager mywifi;
    WifiReceiver myreceiver;
    List<ScanResult> wifiList;
    StringBuilder sb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //definieren
        Button start = (Button) findViewById(R.id.btnstart);

        //Listview
        list = (ListView) findViewById(R.id.lV);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mylist);
        list.setAdapter(adapter);

        //Textview
        tV = (TextView) findViewById(R.id.tV);
        tV.setText("");

        //Wifi
        mywifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        if (mywifi.isWifiEnabled() == false) {
            Toast.makeText(getApplicationContext(), "Wifi is disabled ....making it enabled", Toast.LENGTH_SHORT).show();
            mywifi.setWifiEnabled(true);
        }
        myreceiver = new WifiReceiver();
        registerReceiver(myreceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        mywifi.startScan();

        //buttenevents
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //getWifiNetworksList();
            }
        });

    }

    public void getWifiNetworksList() {
        tV.setText("Wifi is starting");
        tV.setText(myreceiver.Wifilist());

    }

    class WifiReceiver extends BroadcastReceiver {

        public String txt;

        // This method call when number of wifi connections changed
        public void onReceive(Context c, Intent intent) {

            sb = new StringBuilder();
            wifiList = mywifi.getScanResults();
            sb.append("\n        Number Of Wifi connections :" + wifiList.size() + "\n\n");

            for (int i = 0; i < wifiList.size(); i++) {

                sb.append(new Integer(i + 1).toString() + ". ");
                sb.append((wifiList.get(i)).toString());
                sb.append("\n\n");
            }

            tV.setText(sb);//tV...TextView
            Toast.makeText(getApplicationContext(), "reciever finished", Toast.LENGTH_SHORT).show();
        }

        public String Wifilist() {
            return txt;
        }

    }
}
java android wifimanager
1个回答
0
投票

启用位置权限。

该代码工作正常。在Nexus 5上进行了测试。我刚刚在清单文件中添加了以下权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

如果仍未显示任何结果。只需确保您的用户已允许您的应用使用位置权限即可。您可以通过两种方式执行此操作

手动

转到手机中的设置,然后点击该应用的启用选项。 (在我的情况下,我的应用程序名称为WifiSolution)。

enter image description here

以编程方式

您也可以使用Android Runtime Permission进行编程。

© www.soinside.com 2019 - 2024. All rights reserved.