Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从WifiP2pDeviceList获取设备_Java_Android_Wireless_Wifi Direct_Wifip2p - Fatal编程技术网

Java 无法从WifiP2pDeviceList获取设备

Java 无法从WifiP2pDeviceList获取设备,java,android,wireless,wifi-direct,wifip2p,Java,Android,Wireless,Wifi Direct,Wifip2p,我只是在尝试实现Wifi P2P,我被困在获取对等列表上。 当我点击discoverdevice按钮时,我只想获取所有设备,并将设备列表附加到一个字符串中,我可以使用文本视图输出该字符串 MainActivity.java package com.example.lrmah.wifip2p; public class MainActivity extends AppCompatActivity implements WifiP2pManager.PeerListListener { pr

我只是在尝试实现Wifi P2P,我被困在获取对等列表上。 当我点击discoverdevice按钮时,我只想获取所有设备,并将设备列表附加到一个字符串中,我可以使用文本视图输出该字符串

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;
    }
}}
我可能错了,但我认为OnPeeravaailable没有被调用

一些要点:

  • else if(WifiP2pManager.WIFI\u P2P\u CONNECTION\u CHANGED\u 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);
    }
    
  • else if(WifiP2pManager.WIFI\u P2P\u此设备\u已更改\u ACTION.equals(ACTION)){
    //给这里的发现者打电话

    manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
        @Override
        public void onSuccess() {
            if (manager != null) {
                manager.requestPeers(channel, yourWifiP2pManager.PeerListListener);
            }
        }
        @Override
        public void onFailure(int reasonCode) {}
    });
    
  • 然后,设备列表将在中广播

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

  • 它表示在WifiP2pManager.peerListener和WifiP2pManager.ConnectionInfoListener中需要的表达式应替换为WifiP2pManager.peerListener和WifiP2pManager.ConnectionInfoListener的实例
    else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
        WifiP2pDeviceList list = intent.getParcelableExtra(WifiP2pManager.EXTRA_P2P_DEVICE_LIST);
        for (WifiP2pDevice d : list.getDeviceList()) { //...