【问题标题】:Android Wifi P2P connection is not created未创建 Android Wifi P2P 连接
【发布时间】:2014-05-09 13:21:26
【问题描述】:

我有两台设备:HTC One X (Android 4.2.2) 和 Samsung Note N8000 (Android 4.1.2)

我需要使用 Wifi P2P 连接它们。

我以Creating P2P Connections with Wi-Fi 为例,创建了广播接收器和 Wifi P2P 初始化。

private class WifiP2PBroadcastReceiver extends BroadcastReceiver {

    public WifiP2PBroadcastReceiver() {
        register();
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        String action = intent.getAction();

        if (action.equals(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)) {
            int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);

            logger.fine("WifiP2PBroadcastReceiver: WIFI_P2P_CONNECTION_CHANGED_ACTION " + ((state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) ? "enabled" : "disabled"));
        }
        else if (action.equals(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION)) {
            peersUpdated();
        }
    }

    public void register() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
        intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);

        context.registerReceiver(this, intentFilter);
    }

    public void unregister() {
        context.unregisterReceiver(this);
    }
}

Wifi P2P 初始化:

private void initWifiP2p() {
// initialization 
wifiP2pManager = (WifiP2pManager) context.getSystemService(Context.WIFI_P2P_SERVICE);

channel = wifiP2pManager.initialize(context, context.getMainLooper(), new WifiP2pManager.ChannelListener() {
        @Override
        public void onChannelDisconnected() {
            logger.fine("onChannelDisconnected");
        }
    });

// peer disccovery
wifiP2pManager.discoverPeers(channel, new WifiP2pManager.ActionListener() {

        @Override
        public void onSuccess() {
            peersUpdated();
        }

        @Override
        public void onFailure(int reason) {
        }
    });
}

// method called when discoverPeers listener's onSuccess is called
private void peersUpdated() {
    logger.fine("peersUpdated");

    wifiP2pManager.requestPeers(channel, new WifiP2pManager.PeerListListener() {
        @Override
        public void onPeersAvailable(WifiP2pDeviceList peers) {
            // print all peers
            for (WifiP2pDevice device : peers.getDeviceList()) {
                logger.fine("peersUpdated: " + device.deviceName + " " + device.primaryDeviceType + " " + device.deviceAddress);
            }
        }
    });
}

在两台设备上:如果 Wifi AP 断开连接 - 没有任何反应,则不会启动 Wifi 连接。不调用带有动作 WIFI_P2P_CONNECTION_CHANGED_ACTION 的广播接收器 onReceive。 我需要做什么来建立 Wifi P2P 连接?

如果设备连接到 Wifi AP,则调用 WIFI_P2P_PEERS_CHANGED_ACTION,但没有找到对等点。

【问题讨论】:

    标签: android android-wifi wifi-direct wifip2p


    【解决方案1】:

    我发现我的两个设备都运行 KitKat 的两个 nexus 4,需要调用 discoverPeers。 首先要“发现”彼此。

    然后我必须在你的 BroadCastReceive 类的 onReceive 中,钩入这条消息:

    WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action))
    

    然后调用

    if (mManager != null) {
        mManager.requestPeers(mChannel,mMyWiFiActivity );
    }
    

    这将触发 onPeerAvailable,您在哪个类中设置了 PeerListListener。

    一旦您的设备“了解”彼此,(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) 事件似乎就会发生。 我也给 requestPeers 打了个电话。

    我正处于开发的早期阶段,在两个地方调用请求同行似乎并不正确,但目前我正在接受它。祝你好运

    【讨论】:

    • 谢谢!我还面临着 WIFI_P2P_PEERS_CHANGED_ACTION 意图永远不会触发的问题。我错过了为接收设备调用 discoverPeers 的电话。有一次,我在发送和接收设备上调用了 discoverPeers(初始化后),它触发了 WIFI_P2P_PEERS_CHANGED_ACTION 动作。
    【解决方案2】:

    您是否在Manifest文件中添加了以下权限

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

    【讨论】:

    • 这些权限在 AndroidManifest.xml 中设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多