Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Wifi Direct检测到对等点,但对等点列表为空_Java_Android_Wifi_P2p - Fatal编程技术网

Java Android Wifi Direct检测到对等点,但对等点列表为空

Java Android Wifi Direct检测到对等点,但对等点列表为空,java,android,wifi,p2p,Java,Android,Wifi,P2p,一切正常,但当WifiP2pManager调用onpeersavable方法(它正确调用)时,对等设备列表为空,这没有意义,因为如果调用该方法,则是因为发现了对等设备 我的代码有问题吗?谢谢 主要活动、广播接收器和发现: public class Main extends Activity{ FileManager flManager; Context ctx; LinearLayout lay_found_users; LinearLayout lay_conversations; AddL

一切正常,但当
WifiP2pManager
调用
onpeersavable
方法(它正确调用)时,对等设备列表为空,这没有意义,因为如果调用该方法,则是因为发现了对等设备

我的代码有问题吗?谢谢

主要活动、广播接收器和发现:

public class Main extends Activity{

FileManager flManager;
Context ctx;
LinearLayout lay_found_users;
LinearLayout lay_conversations;
AddLayoutItem addLayoutItem = new AddLayoutItem();
private final String TAG = "Main";

//Wifi Direct
WifiP2pManager mManager;
WifiP2pManager.Channel mChannel;
BroadcastReceiver mReceiver;
IntentFilter mIntentFilter;

WifiP2pManager.PeerListListener mPeerListListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act_main);
    ctx = getApplicationContext();
    flManager = new FileManager(ctx);

    //Wifi Direct
    mIntentFilter = new IntentFilter();
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);

    mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
    mChannel = mManager.initialize(this, getMainLooper(), null);

    mPeerListListener = new WifiP2pManager.PeerListListener(){
        @Override
        public void onPeersAvailable(WifiP2pDeviceList peerList){
            Log.i(TAG, "Peers available");
            int size = peerList.getDeviceList().size();
            Log.i(TAG, String.valueOf(size));

        }
    };

    mReceiver = new WDBroadcastReceiver(mManager, mChannel, this, mPeerListListener);
    WDDiscovery wdDiscovery = new WDDiscovery(mManager, mChannel);
    wdDiscovery.discover();
}

@Override
protected void onResume(){
    super.onResume();
    registerReceiver(mReceiver, mIntentFilter);
}

@Override
protected void onDestroy(){
    super.onDestroy();
    unregisterReceiver(mReceiver);
}

public class WDBroadcastReceiver extends BroadcastReceiver {

private WifiP2pManager mManager;
private WifiP2pManager.Channel mChannel;
private Main mActivity;
private final String TAG = this.getClass().getSimpleName();
private WifiP2pManager.PeerListListener mPeerListListener;

public WDBroadcastReceiver(WifiP2pManager manager, WifiP2pManager.Channel channel, Main activity, WifiP2pManager.PeerListListener peerListListener){
    super();
    this.mManager = manager;
    this.mChannel = channel;
    this.mActivity = activity;
    this.mPeerListListener = peerListListener;
}

@Override
public void onReceive(Context context, Intent intent){
    String action = intent.getAction();

    if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)){

        int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);

        if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED){
            Log.i(TAG, "Wifi P2P Enabled");
        } else {
            Log.i(TAG, "Wifi P2P Disabled");
        }

    }else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)){
        if (mManager != null){
            mManager.requestPeers(mChannel, mPeerListListener);
            Log.i(TAG, "Peer Discovered");
        }
    }else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)){
        // Respond to new connection or disconnections
    }else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)){
        // Respond to this device's wifi state changing
    }
}
}
在我的例子中,我添加

在清单中,并授予应用程序权限。
它可以工作。

您使用什么作为
列表视图
/
适配器
?我在这里没有看到与
列表视图相关的代码。我还没有使用适配器。WifiP2pManager调用public void onPeersAvailable(WifiP2pDeviceList peerList){但是peerList是空的,在回调调用时添加了一个断点。查看在调用之前、期间和之后您为peerList获取的值。这里有一些有用的信息,我认为可能对您有所帮助:我做到了,以及“解决方案”这正是我正在做的,但尽管存在广播侦听器检测到的对等点,但对等点列表始终为空。
public class WDDiscovery {

    WifiP2pManager mManager;
    WifiP2pManager.Channel mChannel;
    private final String TAG = this.getClass().getSimpleName();

    public WDDiscovery(WifiP2pManager manager, WifiP2pManager.Channel channel) {
        mManager = manager;
        mChannel = channel;
    }

    public void discover() {

        mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
            @Override
            public void onSuccess() {
                Log.i(TAG, "WiFi P2P Discovery successful");
            }

            @Override
            public void onFailure(int reasonCode) {
                Log.i(TAG, "WiFi P2P Discovery error");
            }
        });
    }
}