"SHAREit" Android 应用程序在技术上是如何工作的?

22

我想在安卓上利用Wi-Fi构建一个数据共享应用,就像“SHAREit”一样,但我不知道从哪里开始。

因此,如果有人能为我清晰解释“SHAREit”的技术概念,那将非常高效易懂。

  1. 当我们想要发送一个文件时,我们可以看到可用的接收设备的名称。
    • 名称是显示为SSID还是其他?
    • 我们如何广播名称和其他信息以在发送方设备上显示?
  2. 当我选择一个设备来发送文件时会发生什么?
  3. 我可以使用哪个API?它是用于什么的?请简单地解释。

请提供所有测试资源和链接。

2个回答

13
我尝试编写了一个名为SHAREthem的库,以模拟SHAREit的工作方式。该库利用WiFi热点便于设备之间进行P2P文件共享和传输。如果接收者未安装应用程序,则还支持应用程序到Web共享。希望它可以帮助您了解使用WiFi热点进行文件共享涉及的技术。
由于这个库有很多组成部分,我制作了一个博客文章,详细介绍了实现细节。在这里,我将尝试涵盖一些组件。
  • HotspotController

    由于Android没有可用的API来启用/禁用热点,因此HC使用Java反射。其功能包括:

    • 控制器创建一个开放式Wifi热点配置,其中包含可以被接收者拦截以识别SHAREthem发送方的SSID、端口和发送方名称。

    • 在禁用共享模式时还原用户的热点配置。

    • 提供已连接WiFi客户端的列表。

  • SHAREthem Server

    一个微型HTTP服务器,扩展自NanoHttpd,使用IP地址作为主机名向接收者提供发送者数据,并默认使用用户或系统分配的端口。

  • SHAREthem Service

    管理SHAREthem服务器的生命周期,并处理前台通知与停止操作的Android服务。

  • UI(活动)

    处理共享/接收操作的Android活动

    • 接收器 - 提供列出可下载文件的UI。将下载请求发布至Android下载管理器以开始文件下载。

    • 发送器 - 显示IP、端口和已连接客户端(接收器)的信息,以及每个已连接客户端的文件传输状态。

    显示来自发送方的所有下载项的接收器列表片段 显示客户端信息和传输状态的共享活动 Web Receiver


非常感谢这个精彩的应用程序...你能否更新一下你的答案...它在Android版本O上无法工作...我解决了一些7.0和7.1的错误,现在它可以工作...但是在O上仍然无法工作。 - Gowthaman M

5
使用Android Wi-Fi P2P库,从这个页面上的文档开始。它告诉您如何使用Wi-Fi P2P进行服务发现,这会满足您需求中的第一条。基本上,您需要让每个设备传输一个DNS-SD TXT,其中可以包含用户ID信息等。设备可以查看其内容,而无需建立套接字,这是您稍后实现需求中的第二项所要做的事情。

1
你能提供一份源代码吗?使得设备在传输SSID、BSSID等信息的同时,还能够传输一些自定义信息,并且其他设备可以在连接前查看这些信息。 - Rashed Shaon
1
他们在示例中给你了那个。你可以在Map对象中放置任何字符串。以下链接告诉你更多关于DNS SD TXT记录格式的内容,但要注意的主要事情是你不应该发送太多字节 -- 最好是100或更少 (http://www.zeroconf.org/rendezvous/txtrecords.html)。 - JASON G PETERSON
2
@JASONGPETERSON 你确定吗?SHAREit使用Wi-Fi P2P吗?那么在接收端创建热点有什么意义呢?Wi-Fi P2P适用于4.0及以上版本,但是SHAREit即使在Android 2.2上也可以使用相同的概念。如果你知道答案,请告诉我。我也正在开发文件传输应用程序。 - Mubarak Basha
略微偏题,但是在Android SDK中是否有类似于Wi-Fi P2P的东西可以用于多客户端设置?(例如,一个本地聊天应用程序,可以在本地Wi-Fi范围内的对等方之间使用) - Prahlad Yeri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接