• Android APN开关原理


    通常是采用加后缀法关闭APN,即在APN信息表(content://telephony/carriers/current )的apn, type字段添加自定义的后缀(参考自APNDroid )。但实际上Android已经提供了开/关数据业务的方法,只是设置为@hidden,没有提供给SDK。

    2.1 在com.android.internal.telephony.ITelephony接口里提供的以下方法

    boolean enableDataConnectivity()
              Allow mobile data connections.

    boolean disableDataConnectivity()
              Disallow mobile data connections.

    这两个方法是隐藏的,不能直接调用。可以使用如下两种方法:

    • 反射
    • 自行编译framework.jar,把这个jar包加入工程的classpath,直接调用。

    对于第二种方法,使用如下代码获得接口实现类的实例

       1: ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.getService("phone"));

    需要权限 

        <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>

    2.2 开始 在android.net.ConnectivityManager类里提供了以下方法

    boolean getMobileDataEnabled()
              Gets the value of the setting for enabling Mobile data.

    void setMobileDataEnabled(boolean enabled)  # 更新说明:该方法在 Android 5.0 API 21 中已移除
              Sets the persisted value for enabling/disabling Mobile data.

    不幸的是这两个方法依然是隐藏的。调用方法如前所叙述。

    需要权限

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

    完整的代码 https://github.com/shaobin0604/ToggleAPN

  • 相关阅读:
    linux之参数实用讲解
    Linux脚本中调用SQL,RMAN脚本
    shell for参数
    Linux Shell参数替换
    Python OOP(1)
    Python 不可变对象
    Python set
    Python tuple
    Python list,tuple,dict and set
    Python 可变长度函数参数
  • 原文地址:https://www.cnblogs.com/shaobin0604/p/2110097.html
Copyright © 2020-2023  润新知