Android WiFi Direct文件传输

  • 1.说明
  • 2.注意事项
    • 2.1 确保申请必要权限
    • 2.2 使用startService
    • 2.3 从group owner 发送数据到client
    • 2.4 设备差异
  • 3.代码

1.说明

最近写个应用,需要用到wifi direct(Android中也叫WifiP2P)进行文件传输,其中,主要的实现流程官方文档有介绍,这里不再赘述。具体实现,参考了这位大佬的。

2.注意事项

2.1 确保申请必要权限

下列的权限都是必要的,确保都申请了

                                 

如果缺少了其中的某项权限,可能会出现一些问题,比如缺少ACCESS_COARSE_LOCATION,在部分机器上,可能会出现无法搜索到设备的情况。

2.2 使用startService

github leavesC 这位大佬启动WifiServerService使用的是bindService的方式,不过,我们的 WifiServerService是继承自IntentService 的,所以,直接用startService即可。

2.3 从group owner 发送数据到client

在WifiServerService的onHandleIntent中, Socket client = serverSocket.accept();接收到客户端连接后,可以使用client.getInetAddress().getHostAddress()获取到client的地址。获取到地址后,group owner端可以使用此地址连接到client。不过确保client端的WifiServerService是正常运行的,即确保ServerSocket开启了,并且正常accept。

可以写一个如下的方法

private void sendFileToIp(File file,String ip) {        if(file.exists() && mWifiP2pInfo != null) {            FileTransferBean fileTransferBean =                    new FileTransferBean(file.getPath(),file.length());            Log.d(TAG, "sendFileToIp: file to client:"+fileTransferBean);            new FileSendTask(this,fileTransferBean).execute(ip);        }    }

发送文件到p2p网络中指定ip的机器。其中FileSendTask是用来发送文件的内部类,在DeviceActivity中。

2.4 设备差异

有的设备需要手动打开wifi direct才能搜索得到,有的设备只需要打开wifi就可以。如果设备搜索不到,可以在设备上选择一个文件分享,在分享方式中选择wifi direct,然后就会进入到你的手机系统提供的wifi direct的搜索界面,这个时候,再用你写的app搜索试试。需要注意的是,两台设备都要在搜索状态下,才能发现互相发现。

3.代码

代码放在gitee上,需要的同学可以前往自取。

搜索设备的界面如上图所示,搜索到设备后,点击设备列表的右上角的按钮,然后,选择连接,连接成功后,如果当前设备是发送端,就可以点击发送

更多相关文章

  1. android 设备唯一码的获取,Cpu号,Mac地址
  2. android拔掉耳机后音乐自动暂停
  3. Android——adb工具的使用
  4. 转载:Android中如何修改系统时间(应用程序获得系统权限)
  5. Android(安卓)安全机制概述 Permission
  6. 这款开源 Android(安卓)实时投屏软件是 Qt 做的
  7. Android官方开发文档Training系列课程中文版:Android的安全建议
  8. 应用程序利用init.rc service获得root权限
  9. ADB常用操作

随机推荐

  1. shape等特殊xml
  2. 电商直播系统开发Android10.0 导航栏和状
  3. Android储存BMP格式图片
  4. Android(安卓)Listview 隐藏滚动条
  5. Android(安卓)postTranslate和preTransla
  6. Android中创建文件夹和文件的操作
  7. 2011.09.26(5)——— android sample之Note
  8. android 抓包
  9. Android之Input子系统事件分发流程
  10. Android中文API(139) —— SQLiteOpenHelpe