wi - fi感知 运行Android 8.0(API级别26)和更高的设备上
2018-01-04 13:20
423 查看
1:应用程序清单中请求以下权限: manifest
2:通过调用PackageManager来检查设备是否支持wi - fi
3:注册一个广播接收器来接收
要开始使用wi - fi,你的应用必须通过调用attach()获得WifiAwareSession。该方法如下:
打开wi - fi感知硬件。
如果没有集群,则形成一个集群。
创建一个具有唯一名称空间的wi - fi感知会话,该名称空间充当在其中创建的所有发现会话的容器。
如果应用程序成功连接,系统将执行onAttached()回调。这个回调提供了一个WifiAwareSession对象,您的应用程序应该用于所有其他会话操作。应用程序现在可以使用会话发布服务或订阅服务。
你的应用程序应该调用attach()一次。如果您多次调用attach(),您的应用程序将接收不同的会话,每个会话都有自己的名称空间。这在复杂的场景中可能有用,但通常应该避免。
注意:只要有活动会话,系统就会保持与wi - fi集群的同步。这种集群消耗资源和电池。为了节约资源,在不需要会话的时候调用wifiawaresession . close()。
3: 发现服务
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI_AWARE)
.setNetworkSpecifier(networkSpecifier)
.build();
<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" />
2:通过调用PackageManager来检查设备是否支持wi - fi
context.getPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE);
3:注册一个广播接收器来接收
IntentFilter filter = new IntentFilter(WifiAwareManager.WIFI_AWARE_STATE_CHANGED_ACTION); BroadcastReceiver myReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { if (WifiAwareManager.isAvailable()) { ... } else { ... } } }; context.registerReceiver(myReceiver, filter);
要开始使用wi - fi,你的应用必须通过调用attach()获得WifiAwareSession。该方法如下:
打开wi - fi感知硬件。
如果没有集群,则形成一个集群。
创建一个具有唯一名称空间的wi - fi感知会话,该名称空间充当在其中创建的所有发现会话的容器。
如果应用程序成功连接,系统将执行onAttached()回调。这个回调提供了一个WifiAwareSession对象,您的应用程序应该用于所有其他会话操作。应用程序现在可以使用会话发布服务或订阅服务。
你的应用程序应该调用attach()一次。如果您多次调用attach(),您的应用程序将接收不同的会话,每个会话都有自己的名称空间。这在复杂的场景中可能有用,但通常应该避免。
注意:只要有活动会话,系统就会保持与wi - fi集群的同步。这种集群消耗资源和电池。为了节约资源,在不需要会话的时候调用wifiawaresession . close()。
3: 发现服务
PublishConfig config = new PublishConfig.Builder() .setServiceName(AWARE_FILE_SHARE_SERVICE_NAME) .build(); mAwareSession.publish(config, new DiscoverySessionCallback() { @Override public void onPublishStarted(PublishDiscoverySession session) { ... } @Override public void onMessageReceived(PeerHandle peerHandle, byte[] message) { ... }, null);
4:订阅服务
SubscribeConfig config = new SubscribeConfig.Builder() .setServiceName(AWARE_FILE_SHARE_SERVICE_NAME) .build(); mAwareSession.subscribe(config, new DiscoverySessionCallback() { @Override public void onSubscribeStarted(SubscribeDiscoverySession session) { .... } @Override public void onServiceDiscovered(PeerHandle peerHandle, byte[] serviceSpecificInfo, List<byte[]> matchFilter) { ... } }, null);要向另一个设备发送消息,您需要以下对象:DiscoverySession。该对象允许您调用sendMessage()。通过发布服务或订阅服务,您的应用程序将获得一个DiscoverySession。另一个设备的PeerHandle,所以你知道在哪里发送消息。你的应用程序可以通过以下两种方式获得另一个设备的PeerHandle:你的应用程序发布一个服务。然后,当从订阅服务器接收消息时,应用程序从onMessageReceived()回调获取用户的PeerHandle。你的app订阅了一项服务。然后,当它发现一个匹配的发布者时,您的应用程序从onServiceDiscovered()回调中获得了发布者的PeerHandle。要发送消息,请调用sendMessage()。然后可能会出现以下回调:当消息被对等方成功接收后,系统将在发送应用程序中执行onmessagesendUNK()回调。当对等点接收到一条消息时,系统将在接收应用程序中执行onMessageReceived()回调。注意:消息通常用于轻量级消息传递,因为它们可能不会传递,而且长度限制在255字节。确定确切的长度限制,叫getMaxServiceSpecificInfoLength()。对于高速、双向通信,你的应用应该创建一个连接5创建一个网络说明符:wi - fi清楚发现,叫DiscoverySession.createNetworkSpecifierOpen()或DiscoverySession.createNetworkSpecifierPassphrase从发布者和订阅者()。OOB发现,叫WifiAwareSession.createNetworkSpecifierOpen()或WifiAwareSession.createNetworkSpecifierPassphrase设备()。应答器不需要提供MAC地址或PeerHandle。如果没有指定MAC地址或PeerHandle,则该设备接受所有连接请求。6NetworkRequest myNetworkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI_AWARE)
.setNetworkSpecifier(networkSpecifier)
.build();
7:
mCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { ... } @Override public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) { ... } @Override public void onLost(Network network) { ... } }; mConnMgr.requestNetwork(networkRequest, mCallback);
9:当你完成网络连接,叫unregisterNetworkCallback()。
相关文章推荐
- 在Android 8.0(API第26级)和更高版本的设备上,您可以在试图通过蓝牙、BLE和wi - fi对其他设备进行配对时定制配对请求对话框
- Android 反射、代理调用系统隐藏API方法与接口类连接Wi-Fi
- HNS物联网僵尸网络现在通过Wi-Fi使用ADB传播到新的Android设备
- Wi-Fi 爆重大安全漏洞,Android、iOS、Windows 等所有无线设备都不安全了
- Android--Intent常用(拨号,浏览器,联系人,Wi-Fi)
- Android Wi-Fi 移植 注意事项
- Android各版本代号、版本号、API/NDK级别、发布时间
- android学习(十九) 使用无线连接设备(二) 用Wi-Fi P2P创建连接
- android 十八 蓝牙及Wi-Fi
- android Wi-Fi集成之分析
- Android 代码名字-版本号-API级别-NDK版本对应关系
- Android 代码名字-版本号-API级别-NDK版本对应关系
- 获取 Android 设备上当前运行的应用的 apk
- android 6 (API 23) 及更高版本 面向 NDK 开发者的 Android 变更
- 【译】Android开发者应该知道的API6.0以上运行时权限
- Android--Intent常用(拨号,浏览器,联系人,Wi-Fi)
- Android---破解锁屏密码、获取wi-fi密码
- Android Wi-Fi 开启SSR调试功能(基于QCOM平台)