最新实战教程,让你了解Android自动化刷量、作弊与防作弊的那些事,案例:刷友盟统计、批量注册苹果帐号

前一段时间,公司里面有一个这样的需要,就是要控制用户的连网方式,当时一听,wifi还好控制啦,但是那个gprs这些移动数据好像没有api的

结果一查,还真没有api给你控制,那就只好自己想办法了,当时想到,好像设置里面有这样一个开关的

然后就这样,就翻开了settings的源码来看了

结果还真让我找到了源码里面是怎样关闭移动数据的链接的

其实ConnectivityManager这个类就是控制我们的移动数据的,但它没有公开打开和关闭的这个方法,所以我们就要通过反射来调用它的这个方法了

好了,废话不多说,我们直接上图,看看效果

下面是代码

package com.xiaobin.test;import java.lang.reflect.Method;import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity implements OnClickListener
{private Button bt_open_wifi;private Button bt_close_wifi;private Button bt_open_gprs;private Button bt_close_gprs;private WifiManager wifiManager;private TelephonyManager telephonyManager;private ConnectivityManager connectivityManager;// 这个是查看一下,现在有没有联网,如果有联网就为true,没有就为falseprivate boolean isConnect = false;private Method method;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 拿到一个wifi管理器,用来管理wifi的开关wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);// 拿到一个telphonyManager,用来判断我们现在有没有联网的telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);if (telephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED){isConnect = true;System.out.println(isConnect);}// 拿到一个链接管理器,打开和关闭数据链接都通过它控制了connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();if (networkInfo == null){System.out.println("当前没有联网");}else{System.out.println(networkInfo.isAvailable());System.out.println(networkInfo.getTypeName());}try{// 这个是ConnectivityManager里面的一个隐藏方法,用它可以对移动数据也就是我们一般所说的gprs这些进行打开或关闭的// 这里有一个值得注意的就是它传递的参数是一个boolean的值,所以这个class就是要boolean.class或Boolean.TYPE// 我之前就是想当然的用到了Boolean.class结果弄了很久才发现过来,这是错的method = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);}catch (Exception e){e.printStackTrace();}bt_open_wifi = (Button) findViewById(R.id.bt_open_wifi);bt_close_wifi = (Button) findViewById(R.id.bt_close_wifi);bt_open_gprs = (Button) findViewById(R.id.bt_open_gprs);bt_close_gprs = (Button) findViewById(R.id.bt_close_gprs);bt_open_wifi.setOnClickListener(this);bt_close_wifi.setOnClickListener(this);bt_open_gprs.setOnClickListener(this);bt_close_gprs.setOnClickListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu){getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onClick(View v){switch (v.getId()){case R.id.bt_open_wifi:if (!wifiManager.isWifiEnabled()){wifiManager.setWifiEnabled(true);System.out.println("正在打开wifi");}break;case R.id.bt_close_wifi:if (wifiManager.isWifiEnabled()){wifiManager.setWifiEnabled(false);System.out.println("正在关闭wifi");}break;case R.id.bt_open_gprs:if (!isConnect){try{method.invoke(connectivityManager, true);System.out.println("正在打开gprs");isConnect = true;}catch (Exception e){e.printStackTrace();}}break;case R.id.bt_close_gprs:if (isConnect){try{method.invoke(connectivityManager, false);System.out.println("正在关闭gprs");isConnect = false;}catch (Exception e){e.printStackTrace();}}break;default:break;}}}

其实上面的代码也是非常的简单啦,就主要的就是一个隐藏的函数setMobileDataEnabled,通过反射调用一下它就好啦

当然,还要加上相应的权限喔

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" />

上面的注释也挺多的了,如果还有什么不明白的,可以留言

好啦,这一次就到这里,接下来,我会陆续把我自己在工作上遇到的技术难点写出来的啦,和大家一起学习

源码下载



打开和关闭wifi和移动数据链接相关推荐

  1. c语言打开关闭文件的顺序,C语言1-文件概述、文件的打开与关闭、顺序读写数据文件(1).docx...

    C语言程序设计教案 章节名称 文件概述.文件的打开与关闭.顺序读写数据文件(1) 授课类型 □理论 □实验 ?理实一体 □实训 □实习 班级 地点 周次 星期 节次 授课进度 ?符合 □超前 □滞后 ...

  2. 打开或者关闭wifi

    //打开wifi class StartWifiListener implements OnClickListener{@Overridepublic void onClick(View v) {Wi ...

  3. 一键关闭wi-fi蓝牙捷径_如何在Windows中使用键盘或桌面快捷方式打开或关闭Wi-Fi...

    一键关闭wi-fi蓝牙捷径 Some laptops come with "Wi-Fi" function keys or switches that can quickly en ...

  4. C++文件操作(打开、关闭、文件读取数据存入数组)

    文件操作 1.文件打开 2.文件关闭 3.文件数据读取 4.数据输出至文本文件 有待补充-- 1.文件打开 在fstream类中,open():实现打开文件的操作,从而将数据流和文件进行关联. voi ...

  5. android 屏蔽 广播,Android中使用BroadcastReceiver打开和关闭WIFI

    由于自动化测试需要,我们希望能够简单的控制Android手机的WIFI开和关,而不是通过UI操作的方式.由于每个Android机型的UI都千差万别,所以需要找到一个通用得方式来满足我们的需求. 最开始 ...

  6. android学习笔记---1.为应用添加新的Activity,中使用Intent(意图),结果码,请求码,得到新打开Activity 关闭后返回的数据,Bundle类的作用

    1.为应用添加新的Activity 第一步:新建一个继承Activity的类,如:NewActivity public class NewActivity extends Activity {     ...

  7. ios获取新数据要不要关_ios13低数据模式什么意思要不要打开 开启关闭设置教程...

    ios13低数据模式什么意思要不要打开 开启关闭设置教程 虽然使用无限流量套餐的用户越来越多,但根据 Apple 的调查显示,绝大多数 iPhone 和 iPad 用户还是会密切关注自己的蜂窝网络数据 ...

  8. Android打开/关闭wifi命令

    1.切换root权限 # adb root; adb remount 2.关闭wifi # adb shell svc wifi disable 3.打开wifi # adb shell svc wi ...

  9. 【转】Android 设置Wifi热点、打开与关闭的监听

    原文地址:http://blog.csdn.net/u011520181/article/details/46496377 用过360的面对面快传,快牙的朋友应该都知道,它们在两台设备间实现文件传输都 ...

最新文章

  1. PNAS:土壤氮循环微生物功能特征的全球生物地理学
  2. python序列类型-python序列类型种类详解
  3. php html实例代码,PHP生成HTML静态页面实例代码
  4. Oracle EBS-SQL (QA-1):检查超出检验周期的检验数据.sql
  5. elasticsearch 6.1.1 transport jar
  6. php 时间错误,PHP xdebug调试trace记录时间错误
  7. 【视频】Java从x86到Arm跨平台,实战一下!
  8. dxf转nc代码软件_Window绝赞的6款软件,效率加班党必备,快到惊人!
  9. c++ string分割字符串split_Java字符串到数组的转换最后放大招
  10. GTASA圣安地列斯 DirectX 2.0 ENB 下窗口化运行的解决办法
  11. 使用JS 实现 分享到 新浪微博 QQ 空间
  12. Python文件读写模式与光标的移动
  13. DHCP实验过程四个阶段
  14. ChatGPT学习研究总结
  15. gpg加密命令 linux_使用 GPG 加密和解密文件
  16. Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage`
  17. anacondaJupyter相关环境配置及常见问题及pycharm快捷命令(很全!很详细)
  18. 在《css禅意花园》中所学到的
  19. 感悟人生的伤感日志_带着眼泪去流浪
  20. 本季度干货导航 | 2022年Q2

热门文章

  1. 何谓KVM切换器及其功能之详解
  2. Win10家庭版安装Docker完整版不踩坑教程
  3. 【GBase 8a MPP数据库集群】日期算术运算
  4. Windows版redis下载 与 RDM下载
  5. c语言 不定参数printf的实现
  6. r710安装exsi_Dell服务器安装EXSI系统
  7. avada5.5.2汉化版更新到avada5.6
  8. 重装oracle 11g,完全卸载办法
  9. 线上马太效应加剧,线下会是“二次元服饰们”的新出路吗?
  10. 网页全终端视频直播/点播H5播放器EasyPlayer.js正式发布,支持H.265网页播放