WifiP2pManager discoverPeers ActionListener返回Busy

时间:2014-08-28 15:29:18

标签: java android data-transfer wifi-direct wifip2p

我正在使用WifiP2pManager类来启动Peers的发现,如下所述:http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html

部分代码如下:

//Activity Class

@Override
protected void onCreate(Bundle savedInstanceState) {

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

    //Separate class here 
    mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this);          

    //register the events to filter on to perform the broadcast receiver
    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.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
        @Override
        public void onSuccess() {                   
           myTextView.setText("Success discovery");
        }

        @Override
        public void onFailure(int reasonCode) {
            myTextView.setText("Discovery errorcode:" + String.valueOf(reasonCode));
        }
    });

}

发生我在手机中接到onSuccess电话(基于JellyBean),但是用于测试运行Android 4.1.2 IceCream三明治的联想A2107A平板电脑刚刚获得onFailure,其中reasonCode等于2(忙碌) ): http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ActionListener.html

我注意到在手机的Wifi设置中显示了WifiDirect发现列表选项,但在平板电脑中没有选项可以执行此操作,尽管操作系统版本4.x据称支持它,至少以编程方式支持(我测试过) ShareIt App和平板电脑可以通过WiFi传输文件)。

此处也提出了类似的问题:Why do I always get BUSY when using WifiP2pManager?但没有接受答案。

在平板电脑上使用此API方法时,我能做些什么来避免始终处于忙碌状态?谢谢!

2 个答案:

答案 0 :(得分:1)

显然联想A2107A平板电脑在其discoveryPeers方法上调用WifiP2pManager实例后返回“忙”状态,不支持WiFi Direct / WiFi P2P,实际上没有选项可以在其上查找P2P对等体因此返回onFailure回调中的statusCode 2 Busy状态,甚至运行Android 4.1.2,理论上它确实支持WifiDirect,这有点奇怪。

有一些有用的项目可以更好地理解这项技术的内部运作:

https://github.com/ahmontero/wifi-direct-demo

https://github.com/mayfourth/WiFi-Direct-File-Transfer

答案 1 :(得分:1)

请确保在调用discoveryPeers之前启用Wifi。 当Wifi被禁用时,我得到了忙碌;启用Wifi时的成功。