Android 广播意图WifiP2pManager.WIFI\u P2P\u对等方\u已更改\u操作未调用,因此无法获取对等方列表

Android 广播意图WifiP2pManager.WIFI\u P2P\u对等方\u已更改\u操作未调用,因此无法获取对等方列表,android,android-wifi,Android,Android Wifi,嘿,我正在根据developer.android.com上的培训样本制作一个android应用程序,以下是我的主要活动代码: package com.example.hellowifi; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity;

嘿,我正在根据developer.android.com上的培训样本制作一个android应用程序,以下是我的主要活动代码:

    package com.example.hellowifi;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.IntentFilter;
    import android.net.wifi.WpsInfo;
    import android.net.wifi.p2p.WifiP2pConfig;
    import android.net.wifi.p2p.WifiP2pDevice;
    import android.net.wifi.p2p.WifiP2pDeviceList;
    import android.net.wifi.p2p.WifiP2pInfo;
    import android.net.wifi.p2p.WifiP2pManager;
    import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ListView;
    import android.widget.Toast;


 public class MainActivity extends Activity {

private final IntentFilter mIntentFilter = new IntentFilter();
private WifiP2pManager mManager = null;
private WifiP2pManager.Channel mChannel = null;
private BroadcastReceiver mReciever;
private ListView mListView;
public static final String TAG = "wifidirectdemo";

// TXT RECORD properties
public static final String TXTRECORD_PROP_AVAILABLE = "available";
public static final String SERVICE_INSTANCE = "_wifidemotest";
public static final String SERVICE_REG_TYPE = "_presence._tcp";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mListView = (ListView) findViewById(R.id.listView);

    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);
    mReciever = new WiFiBroadCastReciever(mManager, mChannel, this);
    startRegistration();
}

@Override
protected void onResume() {
    super.onResume();
    mReciever = new WiFiBroadCastReciever(mManager, mChannel, this);
    registerReceiver(mReciever, mIntentFilter);
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(mReciever);
}

public void OnDiscoverButtonClicked(View view) {
    mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
        @Override
        public void onSuccess() {
            Toast.makeText(MainActivity.this, "Discovery Process Succeded", Toast.LENGTH_SHORT).show();
            System.out.println("changed");
        }

        @Override
        public void onFailure(int reason) {
            Toast.makeText(MainActivity.this, "Discovery Process Failed", Toast.LENGTH_SHORT).show();
        }
    });
}

private static List peers = new ArrayList();/*
private ArrayAdapter listAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,peers);*/

static WifiP2pManager.PeerListListener peerListListener = new WifiP2pManager.PeerListListener() {
    @Override
    public void onPeersAvailable(WifiP2pDeviceList peerList) {
        peers.clear();
        peers.addAll(peerList.getDeviceList());
    }
};

private void startRegistration() {
    //  Create a string map containing information about your service.
    Map record = new HashMap();
    record.put(TXTRECORD_PROP_AVAILABLE, "visible");

    // Service information.  Pass it an instance name, service type
    // _protocol._transportlayer , and the map containing
    // information other devices will want once they connect to this one.
    WifiP2pDnsSdServiceInfo serviceInfo =
            WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record);

    // Add the local service, sending the service info, network channel,
    // and listener that will be used to indicate success or failure of
    // the request.
    mManager.addLocalService(mChannel, serviceInfo, new WifiP2pManager.ActionListener() {
        @Override
        public void onSuccess() {
            Toast.makeText(MainActivity.this, "Added Local Service", Toast.LENGTH_SHORT);
        }

        @Override
        public void onFailure(int arg0) {
            Toast.makeText(MainActivity.this,"Failed to add a service",Toast.LENGTH_SHORT);
        }
    });
}   
}

我的广播接受者课程是:

package com.example.hellowifi;

import java.util.HashMap;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.NetworkInfo;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
import android.util.Log;
import android.widget.Toast;

public class WiFiBroadCastReciever extends BroadcastReceiver {

private MainActivity activity;
private WifiP2pManager mManager=null;
private WifiP2pManager.Channel mChannel=null;
PeerListListener myPeerListListener = null;

public WiFiBroadCastReciever(WifiP2pManager manager, WifiP2pManager.Channel channel,
                                   Activity activity) {
    super();
    this.mManager = manager;
    this.mChannel = channel;
    this.activity = (MainActivity) activity;
}

@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 (WifiP2pManager.WIFI_P2P_STATE_ENABLED==state)
            Log.d("WiFiBroadCastReciever", "WiFi enabled");
        else
            Log.d("WiFiBroadCastReciever", "WiFi disabled");
    }
    else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)){
        Toast.makeText(activity, "in intent", Toast.LENGTH_LONG).show();
        if (mManager != null) {
            mManager.requestPeers(mChannel, myPeerListListener);                
        }
    }
    else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)){
        if (mManager == null) {
            return;
        }

        NetworkInfo networkInfo = (NetworkInfo) intent
                .getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);

        if (networkInfo.isConnected()) {
            // We are connected with the other device, request connection
            // info to find group owner IP
            /*mManager.requestConnectionInfo(mChannel, connectionListener);*/
        }

    }
    else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)){

    }
}

final HashMap<String, String> buddies = new HashMap<String, String>();
package com.example.hellowifi;
导入java.util.HashMap;
导入android.app.Activity;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.net.NetworkInfo;
导入android.net.wifi.p2p.WifiP2pManager;
导入android.net.wifi.p2p.WifiP2pManager.peerListener;
导入android.util.Log;
导入android.widget.Toast;
公共类WiFiBroadCastReciever扩展广播接收器{
私人活动;
私有WifiP2pManager mManager=null;
私有WifiP2pManager.Channel mcchannel=null;
PeerListener MyPeerListener=null;
公共WiFiBroadCastReciever(WifiP2pManager管理器、WifiP2pManager.Channel、,
活动(活动){
超级();
this.mManager=manager;
this.mcchannel=通道;
this.activity=(MainActivity)活动;
}
@凌驾
公共void onReceive(上下文、意图){
String action=intent.getAction();
if(WifiP2pManager.WIFI\u P2P\u STATE\u CHANGED\u ACTION.equals(ACTION)){
int state=intent.getIntExtra(WifiP2pManager.EXTRA\u WIFI\u state,-1);
if(WifiP2pManager.WIFI\u P2P\u STATE\u ENABLED==状态)
Log.d(“WiFiBroadCastReciever”,“启用WiFi”);
其他的
Log.d(“WiFiBroadCastReciever”、“WiFi禁用”);
}
else if(WifiP2pManager.WIFI\u P2P\u PEERS\u CHANGED\u ACTION.equals(ACTION)){
Toast.makeText(活动“in intent”,Toast.LENGTH_LONG).show();
if(mManager!=null){
requestPeers(McChannel、MyPeerListener);
}
}
else if(WifiP2pManager.WIFI\u P2P\u CONNECTION\u CHANGED\u ACTION.equals(ACTION)){
if(mManager==null){
返回;
}
NetworkInfo NetworkInfo=(NetworkInfo)意图
.getParcelableExtra(WifiP2pManager.EXTRA\u网络信息);
if(networkInfo.isConnected()){
//我们已与其他设备连接,请求连接
//查找组所有者IP的信息
/*mManager.requestConnectionInfo(mChannel,connectionListener)*/
}
}
else if(WifiP2pManager.WIFI\u P2P\u此设备\u已更改\u ACTION.equals(ACTION)){
}
}
final HashMap buddies=new HashMap();
}

我接到成功的广播电话,打算WIFI\u P2P\u状态\u更改\u操作,WIFI\u P2P\u连接\u更改\u操作,WIFI\u P2P\u此设备\u更改\u操作,但未更改WIFI\u P2P\u操作 当我在其他设备上进行连接和便携式热点,并试图在我的设备上进行发现时

请注意:WiFi已启用,我也为Discovery successful干杯。之后,WIFI\u P2P\u PEERS\u改变了\u行动意图,不再呼叫。 我试着搜索每一条线。
请帮我找个人。提前谢谢

您还需要在其他设备上运行discoverPeers()。
现在您将收到WIFI\u P2P\u PEERS\u CHANGED\u ACTION intent

我以前也遇到过同样的问题。请检查下面的场景我是如何解决这个问题的


首先,我在服务器和客户端android设备中实现了相同的代码,只是做了一些小改动。我在服务器应用程序中放置了一个按钮来调用discoverPeers()方法。同时,我的客户端应用程序正在运行并连接到同一个WI-FI网络。然后,它会从服务器应用程序中的广播触发WIFI\u P2P\u对等点\u更改\u操作事件。在那里,我得到了附近同龄人的名单

我也在做同样的事情,但仍然
WIFI\u P2P\u PEERS\u CHANGED\u ACTION
没有广播@吉图