其他分享
首页 > 其他分享> > Android Wi-Fi Direct:传递给onConnectionInfoAvailable回调的WifiP2pInfo对象具有null groupOwnerAddress属性

Android Wi-Fi Direct:传递给onConnectionInfoAvailable回调的WifiP2pInfo对象具有null groupOwnerAddress属性

作者:互联网

我试图让两个Android设备使用WiFi Direct与对方进行通信.我列出了ListView中的可用设备,当用户点击设备时,我通过调用WifiP2pManager类中的connect方法启动连接.在onSucces方法中,我调用requestConnectionInfo方法以获取组所有者的IP地址,以便我可以连接到ServerSocket.

问题是我第一次尝试连接传递给onConnectionInfoAvailable回调的WifiP2pInfo对象时具有null groupOwnerAddress属性.这对我来说没有意义,因为我在connect方法的onSuccess回调中调用了reuestConnectionInfo,这意味着已经建立了连接.

几秒钟后,如果我再次尝试通过再次点击设备的名称再次连接,WifiP2pInfo对象现在包含GO的地址,我可以启动TCP连接.

我在调用requestConnectionInfo之前尝试让线程休眠几秒钟,但我仍然遇到同样的问题.

@Override
public void onDialogPositiveClick(DialogFragment dialog, final String enteredPin) {

    WifiP2pConfig config = new WifiP2pConfig();
    config.deviceAddress = mDevice.deviceAddress;
    config.groupOwnerIntent = 0;
    mManager.connect(mChannel, config, new WifiP2pManager.ActionListener() {
        @Override
        public void onSuccess() {

            mManager.requestConnectionInfo(mChannel, new WifiP2pManager.ConnectionInfoListener() {
                @Override
                public void onConnectionInfoAvailable(WifiP2pInfo info) {
                    InetAddress ownerAddress=info.groupOwnerAddress;

                    if (ownerAddress!=null) {
                        Log.d("MainActivity ",ownerAddress.toString());
                        ConnectAsyncTask asyncTask=new ConnectAsyncTask(MainActivity.this,ownerAddress,8888,enteredPin);
                        asyncTask.execute();
                    } else {
                        Toast.makeText(MainActivity.this, "Connection failed! Try again!", Toast.LENGTH_LONG).show();
                    }
                }
            });

        @Override
        public void onFailure(int reason) {

        }
    });
}

解决方法:

当WIFI_P2P_CONNECTION_CHANGED_ACTION广播被捕获时,ConnectionInfo可用.当WifiP2pDevice连接或断开连接时,此广播将触发.这是你的问题.如果设备断开连接,则此广播将触发,但该设备不再在组中.您必须检查更改操作以确定设备已连接或已断开连接. :

public void onConnectionInfoAvailable(WifiP2pInfo info) {
    NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
    if (networkInfo.isConnected()) { 
        //connected
    } else {
        //disconnected
    }
}

标签:wifi-direct,android
来源: https://codeday.me/bug/20190824/1712822.html