android.net.wifi.p2p package API

2024-04-19 22:32
文章标签 android wifi api net package p2p

本文主要是介绍android.net.wifi.p2p package API,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ref links:

api document: http://developer.android.com/reference/android/net/wifi/p2p/package-summary.html

demo: http://developer.android.com/resources/samples/WiFiDirectDemo/index.html


Overview

API package是用于create connection with wifi direct协议(http://en.wikipedia.org/wiki/Wi-Fi_Direct)

 

使用该API,必须是android 4.0 (level 14) or later,而且支持wifi directSamsung Nexus是第一部符合条件的手机。

 


package最重要的classWifiP2pManager,用它主要做下列事情:

1.     Initialize your application for P2P connectionsby calling initialize()

2.     Discover nearby devices by calling discoverPeers() and requestPeers()

3.     Start a P2P connection by calling connect()

4.     还有其他功能:如disconnect P2P connection,获取connection info,创建groupget group info(见下面)

 

Listeners

package几乎全部都是使用异步消息机制,因此你需要implement下面listener interfaces

1.     WifiP2pManager.ActionListener: WifiP2pManager5个方法(cancelConnect, connect, createGroup, discoverPeers,removeGroup)都要用该listener作为参数 for receiving callback

 

listener2callback方法onSuccess” and “onFailure(int)”,分别作为success and failurecallback

 

onFailure(int)的参数值有3个:ERROR,P2P_UNSUPPORTED or BUSY

 

2.     WifiP2pManager.ChannelListener: WifiP2pManagerinitialize方法用该listener作为参数 for receivingcallback.

 

listener1个方法onChannelDisconnected(),作为wifi directchannel disconnect时的callback

 

3.     WifiP2pManager.PeerListListener: WifiP2pManagerrequestPeers方法用该listener作为参数 for receivingcallback.

 

listener1个方法onPeersAvailable(WifiP2pDeviceList peers)作为当调用requestPeers来获取peer list成功时的callback.

 

4.     WifiP2pManager.ConnectionInfoListener: WifiP2pManagerrequestConnectionInfo方法用该listener作为参数 for receivingcallback.

 

listener1个方法onConnectionInfoAvailable(WifiP2pInfo info),作为当调用requestConnectionInfo来获取requestedconnection info成功时的callback.

 

5.     WifiP2pManager.GroupInfoListener: WifiP2pManagerrequestGroupInfo方法用该listener作为参数 for receivingcallback.

 

listener1个方法onGroupInfoAvailable(WifiP2pGroupgroup),作为当调用requestGroupInfo来获取requested group info成功时的callback.

 

 

WifiP2pManagerclass

关键方法:

l initialize(Context srcContext, Looper srcLooper,WifiP2pManager.ChannelListener listener)

 

用来initialize wifi,把本android app注册到wifi framwork里,并返回wifi frameworkchannel。在调用其他方法之前必须首先调用它

 

该方法的返回值是一个WifiP2pManager.Channelobject,它表示wifi framework channelWifiManager的其他方法在调用时都会用该channel作为参数!

 

l discoverPeers(WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)

 

Initiate peerdiscovery.调用该方法会scan for available Wi-Fi peers

 

The functioncall immediately returns after sending a discovery request to the framework,因为是异步消息机制. The application is notified of a success or failure to initiatediscovery through listener callbacks onSuccess() or onFailure(int).

 

The discoveryremains active until a connection is initiated or a p2p group is formed. Register for WIFI_P2P_PEERS_CHANGED_ACTION intent to determinewhen the framework notifies of a change as peers are discovered.

 

在收到WIFI_P2P_PEERS_CHANGED_ACTIONintent后,你就可以调用requestPeers(WifiP2pManager.Channel,WifiP2pManager.PeerListListener)来获取peer list!!

 

l requestPeers(WifiP2pManager.Channel c, WifiP2pManager.PeerListListener listener)

 

sendrequest to获取current list of peers。返回的peer list要在参数PeerListListener里的onPeersAvailable(WifiP2pDeviceList peers)方法里获取

 

l connect (WifiP2pManager.Channel c, WifiP2pConfig config,WifiP2pManager.ActionListener listener)

 

建立p2pconnection to a device with the specified configuration

 

Theapplication is notified of a success or failure to initiate connect throughlistener callbacks onSuccess() or onFailure(int).

 

Register for WIFI_P2P_CONNECTION_CHANGED_ACTION intent todetermine when the framework notifies of a change in connectivity.

 

If the currentdevice is not part of a p2p group, a connect request initiates a groupnegotiation with the peer.

 

If thecurrent device is part of an existing p2p group or has created a p2p group withcreateGroup(WifiP2pManager.Channel, WifiP2pManager.ActionListener), aninvitation to join the group is sent to the peer device.

 

l requestConnectionInfo(WifiP2pManager.Channel c, WifiP2pManager.ConnectionInfoListenerlistener)

 

sendrequest to获取currentconnection info。返回的connection info要在参数ConnectionInfoListener里的onConnectionInfoAvailable(WifiP2pInfo info)方法里获取。

 

l cancelConnect(WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)

 

disconnect current connection

 

l createGroup(WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)

 

Create a p2p groupwith the current device as the group owner.This essentially creates an access point that can acceptconnections from legacy clients as well as other p2p devices.

 

Note: This function would normally not be used unless thecurrent device needs to form a p2p connection with a legacy client

 

Forcommunication with legacy Wi-Fi devices that do not support p2p, an app cancreate a group usingcreateGroup(WifiP2pManager.Channel, WifiP2pManager.ActionListener)which creates an access point whose details can be fetched withrequestGroupInfo(WifiP2pManager.Channel,WifiP2pManager.GroupInfoListener).

 

l requestGroupInfo(WifiP2pManager.Channel c, WifiP2pManager.GroupInfoListenerlistener)

 

l removeGroup(WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)

 

 

Wifi Direct BroadcastReceiver

APP要自己定义一个wifi direct broadcastReceiver (extends android.content.BroadcastReceiver),并register it。该receiver用来接收来自wifi framework的消息/意图通知 (event/intent notification)

 

对于wifi direct p2p,有下面4event/intentnotification我们需要在自定义的wifi direct broadcastReceiver里接收注意,这4event/intent是定义在WifiP2pManager class

l WIFI_P2P_PEERS_CHANGED_ACTION:接收到的消息/意图是available peerlist发生了变化。

 

l WIFI_P2P_STATE_CHANGED_ACTION:接收到的消息/意图是Wi-Fi p2pstate发生变化。State2种:enable and disable

 

l WIFI_P2P_CONNECTION_CHANGED_ACTION:接收到的消息/意图是Wi-Fi p2pconnectivitystate发生改变. State应该是connected and disconnected

 

l WIFI_P2P_THIS_DEVICE_CHANGED_ACTION:接收到的消息/意图是正连接的device发生变化。

 

下面是define and register custom wifi direct broadcastreceiver的最简单例子:


//定义custom wifi direct broadcast receiver
public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {private WifiP2pManager manager;private Channel channel;public WiFiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel) {super();this.manager = manager;this.channel = channel;}//当wifi framework broadcast 相关的intent时,就会callback 该onReceive方法!!@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();  //获取意图if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { //意图为WIFI P2P State发生变化int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1); //get WIFI P2P Stateif (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) { //WIFI P2P State为enable...} else { //WIFI P2P State为disable...}} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { //意图为WIFI P2P current peer list发生变化if (manager != null) {manager.requestPeers(channel, peerListListener);  //send request to get current peers list}} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) { //意图为WIFI P2P connection state发生变化if (manager == null) {return;}NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);  //获取wifi p2p connection stateif (networkInfo.isConnected()) { //WIFI P2P connection state is "connected"manager.requestConnectionInfo(channel, connectionInfoListener);} else { //WIFI P2P connection state is "disconnected"...}} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) { //意图为正连接的device发生变化发生变化WifiP2pDevice device=((WifiP2pDevice) intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE));  //获取正连接的device....}}
}

//Register custom wifi direct broadcast receiver in your app activity
IntentFilter intentFilter = new IntentFilter();
//只filter和wifi p2p相关的4个intent,即表示只会收到这4个intent的broadcast message
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);WiFiDirectBroadcastReceiver receiver = new WiFiDirectBroadcastReceiver(manager, channel);
//register broadcast receiver        
registerReceiver(receiver, intentFilter);


 

Simple Flow

 

 

 

 

 

这篇关于android.net.wifi.p2p package API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918615

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加