当前位置: 首页 > wzjs >正文

个人网站可以做品牌推广运营者邮箱怎么注册

个人网站可以做品牌推广,运营者邮箱怎么注册,网站面包屑导航代码,四平网站seoAndroid WiFi P2P WiFi P2P (Peer-to-Peer) 是 Android 提供的一种允许设备之间直接通过 WiFi 进行通信的技术,无需接入传统的 WiFi 网络或互联网。这种技术也被称为 WiFi Direct。 一、WiFi P2P 基本概念 1. 核心组件 P2P 设备:支持 WiFi P2P 的 And…

Android WiFi P2P

WiFi P2P (Peer-to-Peer) 是 Android 提供的一种允许设备之间直接通过 WiFi 进行通信的技术,无需接入传统的 WiFi 网络或互联网。这种技术也被称为 WiFi Direct。

一、WiFi P2P 基本概念

1. 核心组件

  • P2P 设备:支持 WiFi P2P 的 Android 设备

  • P2P 组:由一个组所有者(Group Owner, GO)和多个客户端组成

  • 组所有者(GO):相当于传统 WiFi 网络中的接入点(AP)

  • 客户端:连接到 GO 的设备

2. 工作流程

  1. 发现附近设备

  2. 请求连接

  3. 建立 P2P 组

  4. 数据传输

  5. 断开连接

二、WiFi P2P API 详解

1. 主要类

  • WifiP2pManager:主管理类,提供发现、连接等方法

  • WifiP2pManager.Channel:与 WiFi P2P 框架通信的通道

  • WifiP2pDevice:表示一个 P2P 设备

  • WifiP2pInfo:包含 P2P 连接信息

  • WifiP2pGroup:表示 P2P 组信息

  • WifiP2pConfig:用于配置 P2P 连接

2. 权限要求

在 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_FINE_LOCATION" />
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" />

注意:从 Android 12 开始,需要 NEARBY_WIFI_DEVICES 权限来发现和连接附近的设备

三、WiFi P2P 实现代码

1. 初始化

// 获取 WifiP2pManager 和 Channel
WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);// 创建广播接收器
private final IntentFilter intentFilter = new IntentFilter();@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 添加必要的 Intent 过滤器intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);// 注册广播接收器receiver = new WiFiDirectBroadcastReceiver(manager, channel, this);registerReceiver(receiver, intentFilter);
}

2. 广播接收器实现

public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {private WifiP2pManager manager;private Channel channel;private Activity activity;public WiFiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel, Activity activity) {this.manager = manager;this.channel = channel;this.activity = activity;}@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {// 检查 WiFi P2P 是否启用int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {// WiFi P2P 已启用} else {// WiFi P2P 未启用}} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {// 发现对等设备列表已更新if (manager != null) {manager.requestPeers(channel, peerListListener);}} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {// P2P 连接状态改变if (manager != null) {NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);if (networkInfo.isConnected()) {// 已连接,请求连接信息manager.requestConnectionInfo(channel, connectionInfoListener);}}} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {// 本设备信息已更新}}
}

3. 发现附近设备

// 开始发现设备
manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {@Overridepublic void onSuccess() {// 发现过程成功启动}@Overridepublic void onFailure(int reason) {// 发现过程启动失败}
});// 处理发现的设备列表
private WifiP2pManager.PeerListListener peerListListener = new WifiP2pManager.PeerListListener() {@Overridepublic void onPeersAvailable(WifiP2pDeviceList peers) {// 处理发现的设备列表List<WifiP2pDevice> devices = new ArrayList<>(peers.getDeviceList());// 更新UI或进行其他处理}
};

4. 连接设备

// 选择要连接的设备
WifiP2pDevice device = ...; // 从发现的设备列表中选择// 创建连接配置
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = device.deviceAddress;
config.wps.setup = WpsInfo.PBC; // 使用按钮配置方式// 发起连接
manager.connect(channel, config, new WifiP2pManager.ActionListener() {@Overridepublic void onSuccess() {// 连接请求成功发送}@Overridepublic void onFailure(int reason) {// 连接失败}
});

5. 获取连接信息

private WifiP2pManager.ConnectionInfoListener connectionInfoListener = new WifiP2pManager.ConnectionInfoListener() {@Overridepublic void onConnectionInfoAvailable(WifiP2pInfo info) {// 处理连接信息InetAddress groupOwnerAddress = info.groupOwnerAddress;if (info.groupFormed && info.isGroupOwner) {// 当前设备是组所有者(GO)// 需要在此处设置服务器套接字} else if (info.groupFormed) {// 当前设备是客户端// 需要连接到GO的IP地址}}};

6. 数据传输

建立连接后,可以使用套接字进行数据传输:

组所有者(GO)端代码
// 创建服务器套接字
ServerSocket serverSocket = new ServerSocket(8888);
Socket client = serverSocket.accept();// 获取输入输出流
DataInputStream inputStream = new DataInputStream(client.getInputStream());
DataOutputStream outputStream = new DataOutputStream(client.getOutputStream());// 读取数据
String message = inputStream.readUTF();// 发送数据
outputStream.writeUTF("Hello from GO!");
客户端端代码
// 连接到GO
Socket socket = new Socket(groupOwnerAddress.getHostAddress(), 8888);// 获取输入输出流
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());// 发送数据
outputStream.writeUTF("Hello from client!");// 读取数据
String message = inputStream.readUTF();

7. 断开连接

manager.removeGroup(channel, new WifiP2pManager.ActionListener() {@Overridepublic void onSuccess() {// 成功断开连接}@Overridepublic void onFailure(int reason) {// 断开连接失败}
});

四、常见问题与解决方案

  1. 设备无法发现其他设备

    • 确保两台设备都启用了 WiFi P2P

    • 检查是否授予了必要权限(特别是位置权限)

    • 确保设备之间距离足够近(通常不超过10米)

  2. 连接失败

    • 检查设备是否支持 WiFi Direct

    • 尝试不同的 WPS 配置方法(PBC 或 KEYPAD)

    • 重启设备的 WiFi

  3. 数据传输问题

    • 确保在获取连接信息后才尝试建立套接字连接

    • 检查防火墙设置是否阻止了端口通信

    • 确保正确处理了网络操作线程(不要在UI线程执行网络操作)

  4. Android 12 及更高版本的兼容性

    • 添加 NEARBY_WIFI_DEVICES 权限

    • 如果不需要位置信息,设置 usesPermissionFlags="neverForLocation"

    • 考虑添加 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 权限以获得更好的兼容性

五、最佳实践

  1. 用户体验优化

    • 在发现和连接过程中显示适当的进度指示

    • 提供明确的连接状态反馈

    • 处理各种错误情况并提供恢复选项

  2. 性能考虑

    • 发现过程消耗较多电量,应在必要时才启动

    • 连接建立后及时停止发现过程

    • 考虑使用服务来处理长时间运行的网络操作

  3. 安全性

    • 验证连接设备的身份(如设备名称或其他标识)

    • 考虑在应用层添加加密机制

    • 敏感数据传输使用安全协议

  4. 兼容性处理

    • 检查设备是否支持 WiFi P2P:manager != null && channel != null

    • 为旧版本 Android 提供备用方案

    • 处理不同厂商设备的兼容性问题

http://www.dtcms.com/wzjs/808469.html

相关文章:

  • 安徽网站建设系统产品营销型网站建设
  • 乐平市建设局网站网络建设规划方案怎么写
  • 上海网站制作平台wordpress 插件 破解
  • 公司建网站费用怎么做分录十大免费视频素材网
  • 上海专业微信网站开发公司制作网站开发
  • 我们做的网站是优化型结构毕业设计做APP好还是网站
  • 浙江省建设监理协会网站学校网站建设合同
  • 网页制作和网站制作有什么区别ui设计和网站建设人员李伟宁
  • 贵州省住房和城乡建设部网站wordpress 搭建 查分系统
  • 彩票网站什么做网站规划与栏目结构诊断
  • 全国工程建设行业优秀网站昆明网站建设建站技巧
  • 上海网站建设特点网站如何备案工信局
  • 苏州网站建设营销做网站得多少钱
  • 亚马逊做网站凯里网站建设go007
  • 做网站背景的图片大小北京app开发
  • 好的网站制作平台网站中英文切换怎麼做
  • wordpress主题多语言包沈阳seo哪家公司
  • 推荐微信网站建设四川省化工建设有限公司网站
  • 网络公司网站官网网站开发方案ppt
  • 做ppt的网站叫什么如何选择网站开发公司
  • 普通电脑可以做网站服务器吗仿制别人的竞价网站做竞价犯法吗
  • 电商店铺设计seo优化排名工具
  • 深圳住房和建设局官网网站营销型网站建设论文
  • 学校网站建设培训心得小学网站建设情况说明
  • 国内高端网站正规的培训行业网站制作
  • 大学新校区建设网站网站开通流程
  • 静宁门户网站网站导航栏模板怎么做
  • 企业静态网站源码建站的方式有哪些
  • 河北网站制作 网站开发河北注册公司流程和费用
  • 电商平台设计电商网站建设wordpress搜索页