无法在Android中显示已连接wifi的设备的列表

时间:2019-08-14 13:01:55

标签: java android networking wifimanager

此代码有问题。我试图在列表中显示连接在同一WIFI上的所有设备。

我进行了调试,结果表明已建立与WIFI的连接,但即使确定有某些连接的设备,也无法检测到任何设备。我用计算机和android ping通了双方,并建立了连接。

如果你们有什么想法可能会出问题,请让我知道,因为我没有想法。

清单文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">

<uses-permission
    android:name="android.permission.ACCESS_FINE_LOCATION"
    android:required="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
    android:name="android.permission.ACCESS_WIFI_STATE"
    android:required="true" />
<uses-permission
    android:name="android.permission.CHANGE_WIFI_STATE"
    android:required="true" />

<uses-permission
    android:name="android.permission.NFC"
    android:required="true" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".Intro_Activity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/title_activity_intro_"
        android:theme="@style/FullscreenTheme"></activity>
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Activity_Main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.app.MainActivity">


<ToggleButton
    android:id="@+id/toggleButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onToggleClicked"
    android:textOff="Wi-Fi Off"
    android:textOn="Wi-Fi On" />

<ListView
    android:id="@+id/listView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">


</ListView>


</LinearLayout>

MainActivity.java

package com.example.app;
import androidx.appcompat.app.AppCompatActivity;
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.SupplicantState;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.ToggleButton;
import java.util.List;


public class MainActivity extends AppCompatActivity {

private WifiManager wifiManager;
private BroadcastReceiver wifiReciever;
private ArrayAdapter adapter;
SupplicantState supState;


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

    ListView listView = findViewById(R.id.listView);
    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
    listView.setAdapter(adapter);

    wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

    wifiReciever = new WiFiScanReceiver();


    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    supState = wifiInfo.getSupplicantState();


}


    public void onToggleClicked(View view) {

    adapter.clear();
    ToggleButton button = findViewById(R.id.toggleButton);

    if (wifiManager == null) {
        //device does not support wifi
        Toast.makeText(getApplicationContext(), "Oop! Your device does not support Wi-Fi",
                Toast.LENGTH_SHORT).show();
        button.setChecked(false);
    } else {
        if (button.isChecked()) { // to turn on wifi
            if (!wifiManager.isWifiEnabled()) {
                Toast.makeText(getApplicationContext(), "Wi-Fi is turned on." +
                                "\n" + "Scanning for access points...",
                        Toast.LENGTH_SHORT).show();
                wifiManager.setWifiEnabled(true);
            } else {
                Toast.makeText(getApplicationContext(), "Wi-Fi is already turned on." +
                                "\n" + "Scanning for access points...",
                        Toast.LENGTH_SHORT).show();
            }

            wifiManager.startScan();

        } else {
            Toast.makeText(getApplicationContext(), "Wi-Fi is turned off.",
                    Toast.LENGTH_SHORT).show();
        }
    }

}

class WiFiScanReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
            List<ScanResult> wifiScanResultList = wifiManager.getScanResults();
            for (int i = 0; i < wifiScanResultList.size(); i++) {
                ScanResult accessPoint = wifiScanResultList.get(i);
                String listItem = accessPoint.SSID + ", " + accessPoint.BSSID;
                adapter.add(listItem);
            }
        }
    }
}


protected void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
    registerReceiver(wifiReciever, filter);
}


@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(wifiReciever);
}
}

0 个答案:

没有答案