Android Wifi Direct onPeersAvailable不显示任何内容

法提赫·巴曼贝(Fatih Barmanbay)

我正在尝试使用Wifi Direct开发一个简单的应用程序。问题是我无法使用onPeersAvailable方法获取可用对等方的列表。我尝试了这里这里提到的解决方案但是没有运气。日志上什么也没有,尝试使用Toast代替日志,但屏幕上也没有任何显示。这是我的Main和BroadCastReceiver类。

主类:

public class MainActivity extends AppCompatActivity {

private final String TAG = this.getClass().toString();

WifiP2pManager mManager;
WifiP2pManager.Channel mChannel;
BroadcastReceiver mReceiver;
IntentFilter mIntentFilter;

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

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

    Button btn_discover = (Button) findViewById(R.id.btn_discover);
    btn_discover.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
                @Override
                public void onSuccess() {
                    /*Toast.makeText(getApplicationContext(), "Discovery is a success.",
                            Toast.LENGTH_SHORT).show();*/
                    //startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
                }

                @Override
                public void onFailure(int reasonCode) {
                    Toast.makeText(getApplicationContext(), "Discovery is a failure "+reasonCode,
                            Toast.LENGTH_SHORT).show();
                }
            });
        }
    });
}

/* register the broadcast receiver with the intent values to be matched */
@Override
protected void onResume() {
    super.onResume();
    registerReceiver(mReceiver, mIntentFilter);
}
/* unregister the broadcast receiver */
@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(mReceiver);
}}

BroadCastReceiver类:

public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {
private final String LOG_TAG = this.toString();
private WifiP2pManager mManager;
private WifiP2pManager.Channel mChannel;
private MainActivity mActivity;

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) {
            Log.i(LOG_TAG, "Wifi Direct is enabled");
        } else {
            Log.i(LOG_TAG, "Wifi Direct is not enabled");
        }
    } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
        // request available peers from the wifi p2p manager. This is an
        // asynchronous call and the calling activity is notified with a
        // callback on PeerListListener.onPeersAvailable()
        if (mManager != null) {
            mManager.requestPeers(mChannel, new WifiP2pManager.PeerListListener() {
                @Override
                public void onPeersAvailable(WifiP2pDeviceList wifiP2pDeviceList) {
                    Log.i(LOG_TAG, "Found some peers!!! "+wifiP2pDeviceList.getDeviceList().size());
                }
            });
        }
    } 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
    }
}}

我确定我的设备(运行Android 4.4.4的2012 Nexus 7)支持Wifi Direct。

贾德

我认为问题是因为您要在“ WiFiDirectBroadcastReceiver”内部创建新的“ PeerListListener”。

尝试将其添加到您的主要活动中:

public class MainActivity extends AppCompatActivity implements WifiP2pManager.PeerListListener

然后将新方法添加到您的主要活动中以侦听可用的对等方:

@Override
public void onPeersAvailable(WifiP2pDeviceList peerList) {
   Log.i(LOG_TAG, "Found some peers!!! " + peerList.getDeviceList().size());
}

注意:不要忘记创建新的侦听器变量,而不是创建“ WiFiDirectBroadcastReceiver”,并将主活动作为对它的引用进行传递。

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Android中更改Wifi Direct名称

来自分类Dev

Android同时运行Wifi Lan和Wifi Direct

来自分类Dev

没有Wifi热点或Wifi Direct的Android广播/接收数据

来自分类Dev

更改WiFi-Direct IP范围?在Android WiFi-Direct中强制使用IPv6?

来自分类常见问题

Android 10设备无法开始发现wifi Direct

来自分类Dev

Android WiFi Direct requestGroupInfo 返回零大小列表

来自分类Dev

Android Listview不显示任何内容

来自分类Dev

Android-ExpandableListView不显示任何内容

来自分类Dev

Android Studio Logcat不显示任何内容

来自分类Dev

如何设置Wifi Direct

来自分类Dev

如何设置Wifi Direct

来自分类Dev

使用远程显示API和WiFi Direct连接到Chromecast

来自分类Dev

如何在Wifi-Direct Android中成为特定的群组所有者

来自分类Dev

Android-通过wifi Direct P2P为多个设备创建分组

来自分类Dev

在Android WiFi Direct服务发现中发送数据而不是进行连接

来自分类Dev

Android WiFi Direct-客户端/服务器-ECONNREFUSED(拒绝连接)更新

来自分类Dev

如何在Android Wifi Direct(P2P)上监视传入的文件传输请求

来自分类Dev

Android / WiFi Direct-如何使用智能手机查找PC并建立连接

来自分类Dev

如何在Android Wifi Direct(P2P)上监视传入的文件传输请求

来自分类Dev

带有ArrayAdapter的Android ListView不显示任何内容

来自分类Dev

更改方向时,Android Listview 不显示任何内容

来自分类Dev

从 Android Studio 的 Palette 中拖放任何内容时不显示任何内容

来自分类Dev

获取设备的WiFi Direct IP地址

来自分类Dev

Wifi Direct的一对多方案

来自分类Dev

使用UDP在Wifi Direct上广播

来自分类Dev

Atheros驱动程序对wifi Direct的支持

来自分类Dev

在Mac上启用WiFi-Direct

来自分类Dev

Atheros驱动程序对wifi Direct的支持

来自分类Dev

如何设置wifi Direct的接口设备名称

Related 相关文章

  1. 1

    在Android中更改Wifi Direct名称

  2. 2

    Android同时运行Wifi Lan和Wifi Direct

  3. 3

    没有Wifi热点或Wifi Direct的Android广播/接收数据

  4. 4

    更改WiFi-Direct IP范围?在Android WiFi-Direct中强制使用IPv6?

  5. 5

    Android 10设备无法开始发现wifi Direct

  6. 6

    Android WiFi Direct requestGroupInfo 返回零大小列表

  7. 7

    Android Listview不显示任何内容

  8. 8

    Android-ExpandableListView不显示任何内容

  9. 9

    Android Studio Logcat不显示任何内容

  10. 10

    如何设置Wifi Direct

  11. 11

    如何设置Wifi Direct

  12. 12

    使用远程显示API和WiFi Direct连接到Chromecast

  13. 13

    如何在Wifi-Direct Android中成为特定的群组所有者

  14. 14

    Android-通过wifi Direct P2P为多个设备创建分组

  15. 15

    在Android WiFi Direct服务发现中发送数据而不是进行连接

  16. 16

    Android WiFi Direct-客户端/服务器-ECONNREFUSED(拒绝连接)更新

  17. 17

    如何在Android Wifi Direct(P2P)上监视传入的文件传输请求

  18. 18

    Android / WiFi Direct-如何使用智能手机查找PC并建立连接

  19. 19

    如何在Android Wifi Direct(P2P)上监视传入的文件传输请求

  20. 20

    带有ArrayAdapter的Android ListView不显示任何内容

  21. 21

    更改方向时,Android Listview 不显示任何内容

  22. 22

    从 Android Studio 的 Palette 中拖放任何内容时不显示任何内容

  23. 23

    获取设备的WiFi Direct IP地址

  24. 24

    Wifi Direct的一对多方案

  25. 25

    使用UDP在Wifi Direct上广播

  26. 26

    Atheros驱动程序对wifi Direct的支持

  27. 27

    在Mac上启用WiFi-Direct

  28. 28

    Atheros驱动程序对wifi Direct的支持

  29. 29

    如何设置wifi Direct的接口设备名称

热门标签

归档