TrafficStats为我们提供了有关哪个应用程序消耗bandwith的信息。
我想编写一个应用程序,可以在需要时禁用/启用其他应用程序的互联网使用。
我看到有一些谷歌播放应用程序正在这样做,但如何?
答案 0 :(得分:0)
private void setMobileDataEnabled(Context context, boolean enabled) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final Class conmanClass = Class.forName(conman.getClass().getName());
final Field connectivityManagerField = conmanClass.getDeclaredField("mService");
connectivityManagerField.setAccessible(true);
final Object connectivityManager = connectivityManagerField.get(conman);
final Class connectivityManagerClass = Class.forName(connectivityManager.getClass().getName());
final Method setMobileDataEnabledMethod = connectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(connectivityManager, enabled);
}
别忘了将此行添加到您的清单文件
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
答案 1 :(得分:-1)
考虑使用iptables
好的例子(显示如何编写防火墙程序)是orWall
将您的应用置于Orbot后面并一次性阻止所有不需要的流量。
Orwall page also pointing to GitHub source Codes
你知道怎么读吗?“这不是一个解决方案。这只是另一个程序正在做这件事。我问的是如何编写这样的程序..哪个可以启用或禁用另一个应用程序的Internet访问。所以-1”< / em>的
iptables是一个用户空间应用程序,允许系统管理员配置Linux内核防火墙(实现为不同的Netfilter模块)及其存储的链和规则提供的表。目前不同的内核模块和程序用于不同的协议; iptables适用于IPv4,ip6tables适用于IPv6,arptables适用于ARP,ebtables适用于以太网帧。
iptables需要提升权限才能运行,必须由root用户执行,否则无法正常运行。在大多数Linux系统上,iptables安装为/ usr / sbin / iptables并记录在其手册页中,可以在安装时使用man iptables打开。它也可以在/ sbin / iptables中找到,但由于iptables更像是服务而不是“基本二进制”,所以首选位置仍为/ usr / sbin。
术语iptables也常用于包含性地引用内核级组件。 x_tables是内核模块的名称,该模块承载所有四个模块使用的共享代码部分,该模块还提供用于扩展的API;随后,Xtables或多或少地用于指代整个防火墙(v4,v6,arp和eb)架构。
iptables的后续版本是nftables,它已合并到内核版本3.13中的Linux内核主线,该版本于2014年1月19日发布