【发布时间】:2014-01-10 02:12:40
【问题描述】:
我正在开发应用程序,它将检测使用 WIFI/蓝牙/其他方式传输的文件。它还将检测正在执行此操作的应用程序。
如果我想检测文件的传输,那么最好的方法是什么?
我在想它可以通过广播接收器来实现Intent.ACTION_SEND 动作。但后来我想出了@CommonsWare'sanswer 这个question。
在我的情况下将如何实现?
【问题讨论】:
我正在开发应用程序,它将检测使用 WIFI/蓝牙/其他方式传输的文件。它还将检测正在执行此操作的应用程序。
如果我想检测文件的传输,那么最好的方法是什么?
我在想它可以通过广播接收器来实现Intent.ACTION_SEND 动作。但后来我想出了@CommonsWare'sanswer 这个question。
在我的情况下将如何实现?
【问题讨论】:
所有应用程序都在 Android 中进行了沙盒处理,因此您可以从外部应用程序获得的关于它们正在做什么的信息有限。这是设计使然,如果这一切都暴露出来,那将是可怕的。但这并不是说你不能从他们那里收集到一些信息。您可以使用 TrafficStats API 查看通过网络发送的数据。因此,您可以不断地轮询这些 API 以获取所有 UID,并查看哪些 uid 更新了 tx 和 rx 字节。这将使您了解不同应用程序如何/何时通过网络发送数据。这不会让您访问特定的文件信息。
获取从 here 获取的所有 uid 的示例代码。
final PackageManager packageManager = getPackageManager();
List<ApplicationInfo> installedApplications =
packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo appInfo : installedApplications)
{
Log.d("OUTPUT", "Package name : " + appInfo.packageName);
Log.d("OUTPUT", "Name: " + appInfo.loadLabel(packageManager));
}
流量统计 API 位于 here。
不确定如何通过蓝牙实现。如果您实际构建了您尝试监控的其他应用程序,这当然是不同的。
【讨论】: