Android WIFIdirect discoverPeers onFailure

WifiP2pManager.discoverPeers fails in android 10

WifiP2pManager discoverPeers onFailure

原因:

  1. 未打开手机定位。
  2. 未获取到定位授权。

报错信息:
E/WifiPermissionsUtil: Location mode is disabled for the device

其他原因参考:
https://stackoverflow.com/questions/65018782/wifip2pmanager-discoverpeers-fails-in-android-10-despite-of-using-runtime-perm

Android中的WiFi通信可以通过WiFi Direct或者Socket实现。 1. WiFi Direct通信 WiFi Direct是一种点对点的无线网络连接技术,可以直接在两个设备之间创建连接,不需要使用中介设备。在Android中,可以使用WifiP2pManager API来管理WiFi Direct连接。以下是一个简单的WiFi Direct通信示例: (1)在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> ``` (2)创建WiFi Direct连接 ``` WifiP2pManager wifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); WifiP2pManager.Channel channel = wifiP2pManager.initialize(this, getMainLooper(), null); wifiP2pManager.discoverPeers(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { // 发现Peers成功 } @Override public void onFailure(int reason) { // 发现Peers失败 } }); ``` (3)连接到其他设备 ``` private WifiP2pManager.ConnectionInfoListener connectionListener = new WifiP2pManager.ConnectionInfoListener() { @Override public void onConnectionInfoAvailable(WifiP2pInfo info) { if (info.groupFormed && info.isGroupOwner) { // 作为group owner处理连接 } else if (info.groupFormed) { // 作为client处理连接 } } }; wifiP2pManager.connect(channel, config, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { // 连接成功 } @Override public void onFailure(int reason) { // 连接失败 } }); ``` 2. Socket通信 Socket是一种通用的网络通信协议,可以在不同的网络之间进行通信。在Android中,可以使用Socket实现WiFi通信。以下是一个简单的Socket通信示例: (1)在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` (2)创建Socket连接 ``` String host = "192.168.1.100"; int port = 12345; Socket socket = new Socket(host, port); ``` (3)发送和接收数据 ``` OutputStream outputStream = socket.getOutputStream(); outputStream.write("Hello, World!".getBytes()); InputStream inputStream = socket.getInputStream(); byte[] buffer = new byte[1024]; int len = inputStream.read(buffer); String message = new String(buffer, 0, len); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值