簡體   English   中英

無法從WifiP2pDeviceList獲取設備

[英]Unable to fetch devices from WifiP2pDeviceList

我只是在嘗試實現Wifi P2P,而我一直在獲取同行名單。 當我單擊發現設備按鈕時,我只想獲取所有設備,將設備列表附加到一個字符串即可,我可以使用文本視圖輸出該字符串。

MainActivity.java

package com.example.lrmah.wifip2p;


public class MainActivity extends AppCompatActivity implements 
WifiP2pManager.PeerListListener {

private List<WifiP2pDevice> peers = new ArrayList<WifiP2pDevice>();
WifiP2pManager mManager;
WifiP2pManager.Channel mChannel;
BroadcastReceiver mReceiver;
Button B;
TextView t;


IntentFilter mIntentFilter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    t=(TextView) findViewById(R.id.displayTextView);
    B=(Button) findViewById(R.id.discoverPeers);

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

    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);

    B.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
                @Override
                public void onSuccess() {
                    Toast.makeText(getApplicationContext(),"success",Toast.LENGTH_SHORT).show();
                }

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

        }
    });




}

@Override
protected void onResume() {
    super.onResume();
    registerReceiver(mReceiver, mIntentFilter);
}


/* unregister the broadcast receiver */
@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(mReceiver);
}

@Override
public void onPeersAvailable(WifiP2pDeviceList peerList) {
    List<WifiP2pDevice> refreshedPeers = (List<WifiP2pDevice>) peerList.getDeviceList();
    if (!refreshedPeers.equals(peers)) {
        peers.clear();
        peers.addAll(refreshedPeers);
    }

    WifiP2pDevice device= refreshedPeers.get(0);
    t.setText(device.deviceName);
    if (peers.size() == 0) {
        return;
    }
}}

WifiDirectBroadcastReceiver

package com.example.lrmah.wifip2p;


public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {

private WifiP2pManager mManager;
private WifiP2pManager.Channel mChannel;
private MainActivity mActivity;
WifiP2pManager.PeerListListener myPeerListListener;

public WiFiDirectBroadcastReceiver(WifiP2pManager manager, WifiP2pManager.Channel channel,
                                   MainActivity activity) {
    super();
    this.mManager = manager;
    this.mChannel = channel;
    this.mActivity = 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 (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
            Toast.makeText(mActivity,"wifi is on",Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(mActivity,"Please turn on wifi",Toast.LENGTH_LONG).show();
        }
    } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
        if (mManager != null) {
            mManager.requestPeers(mChannel, mActivity);
        }
    }
    else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
        // Respond to new connection or disconnections
    } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
        // Respond to this device's wifi state changing
    }
}}

我可能是錯的,但我認為未調用onPeerAvailable。

一些要點:

  1. else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) { //您應該在這里調用

     NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO); if (networkInfo.isConnected() && isSender) { // connected with the other device, request connection info to find group owner IP manager.requestConnectionInfo(channel, yourWifiP2pManager.ConnectionInfoListene); } 
  2. else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) { //在此處致電discoverPeers

     manager.discoverPeers(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { if (manager != null) { manager.requestPeers(channel, yourWifiP2pManager.PeerListListener); } } @Override public void onFailure(int reasonCode) {} }); 
  3. 那么設備列表將在

     else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { WifiP2pDeviceList list = intent.getParcelableExtra(WifiP2pManager.EXTRA_P2P_DEVICE_LIST); for (WifiP2pDevice d : list.getDeviceList()) { //... 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM