使用WifiP2pManager时为什么总是出现忙碌现象?

时间:2013-08-05 16:54:56

标签: android p2p wifi-direct

我正在尝试使用Wi-Fi Direct连接两台Android设备。

在我的HTC-Phone(One SV)上似乎有效,但是我的第二台设备是LG Optimus 4xhd,它无法正常工作。

在我的onResume()函数中,我启动以下线程:

new Thread(){
        private int count=0;
        public void run()
        {
            mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {

                @Override
                public void onSuccess() {
                    Log.d(tag,"SUCCESS - started discovering peers");

                }

                @Override
                public void onFailure(int reason) {
                    count++;

                    String err=new String();
                    if(reason==WifiP2pManager.BUSY) err="BUSY";
                    if(reason==WifiP2pManager.ERROR)err="ERROR";
                    if(reason==WifiP2pManager.P2P_UNSUPPORTED) err="P2P_UNSUPPORTED";
                    Log.d(tag,"FAIL - couldnt start to discover peers code: "+err+" ("+count+")");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    if(count>=20)return;
                    mManager.discoverPeers(mChannel, this);
                }
            });
        }
    }.start();

正如我之前所说的:这在我的HTC上运行良好。 但是对于LG,我只是“失败 - 无法开始发现同行代码:忙碌”(20次)。

我也尝试过WifiP2pManager.createGroup(),结果相同。

我意识到的另一件事是,我的带有以下过滤器的BroadcastReceiver在我的LG上没有收到任何东西(HTC获得一些广播)。 过滤器:

 filter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
    // Indicates a change in the list of available peers.
    filter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
    // Indicates the state of Wi-Fi P2P connectivity has changed.
    filter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
    // Indicates this device's details have changed.
    filter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);

我没有尝试任何花哨的东西。我只是在http://developer.android.com/guide/topics/connectivity/wifip2p.html

上关注Wi-Fi Direct的Api指南

我能做些什么吗?我不明白为什么LG-Phone应该有所不同。

最后确定一件事:在我的onCreate()中,我按照以下方式启动我的经理:

 mManager = (WifiP2pManager) getSystemService(MainActivity.WIFI_P2P_SERVICE);
    mChannel = mManager.initialize(this, getMainLooper(), receiver);

它似乎适用于两种设备。 (我回来了一个频道)

1 个答案:

答案 0 :(得分:-1)

你使用mainLooper所以不要创建任何线程并做所有的事情,并做一些这样的事情:

public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub

        switch(item.getItemId()){
        case R.id.search_devices:
            if(!isWifiP2pEnabled){
                Toast.makeText(this, "enable wifi p2p", Toast.LENGTH_LONG).show();
                return true;
            }
            onInitiateDiscovery();
            manager.discoverPeers(channel, MainActivity.this);

            default: 
                return super.onOptionsItemSelected(item);

        }