[Android Traffic] Android网络开启、关闭整理

转载: http://blog.csdn.net/tu_bingbing/article/details/8469871

近段时间由于要对手机网络状况进行判断、开启和关闭,从网上找了些资料,现整理如下

包含了对WiFi、GPRS、飞行模式的开启、关闭以及一些状态的检测,在小米和三星平板上测试均通过

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

package com.my.device_admin.business;

import java.lang.reflect.Method;

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.provider.Settings;

public class NetworkManager {

    private Context context;
    private ConnectivityManager connManager;

    public NetworkManager(Context context) {
        this.context = context;
        connManager = (ConnectivityManager) this.context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
    }

    /**
     * @return 网络是否连接可用
     */
    public boolean isNetworkConnected() {

        NetworkInfo networkinfo = connManager.getActiveNetworkInfo();

        if (networkinfo != null) {
            return networkinfo.isConnected();
        }

        return false;
    }

    /**
     * @return wifi是否连接可用
     */
    public boolean isWifiConnected() {

        NetworkInfo mWifi = connManager
                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        if (mWifi != null) {
            return mWifi.isConnected();
        }

        return false;
    }

    /**
     * 当wifi不能访问网络时,mobile才会起作用
     * @return GPRS是否连接可用
     */
    public boolean isMobileConnected() {

        NetworkInfo mMobile = connManager
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (mMobile != null) {
            return mMobile.isConnected();
        }
        return false;
    }

    /**
     * GPRS网络开关 反射ConnectivityManager中hide的方法setMobileDataEnabled 可以开启和关闭GPRS网络
     *
     * @param isEnable
     * @throws Exception
     */
    public void toggleGprs(boolean isEnable) throws Exception {
        Class<?> cmClass = connManager.getClass();
        Class<?>[] argClasses = new Class[1];
        argClasses[0] = boolean.class;

        // 反射ConnectivityManager中hide的方法setMobileDataEnabled,可以开启和关闭GPRS网络
        Method method = cmClass.getMethod("setMobileDataEnabled", argClasses);
        method.invoke(connManager, isEnable);
    }

    /**
     * WIFI网络开关
     *
     * @param enabled
     * @return 设置是否success
     */
    public boolean toggleWiFi(boolean enabled) {
        WifiManager wm = (WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);
        return wm.setWifiEnabled(enabled);

    }

    /**
     *
     * @return 是否处于飞行模式
     */
    public boolean isAirplaneModeOn() {
        // 返回值是1时表示处于飞行模式
        int modeIdx = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0);
        boolean isEnabled = (modeIdx == 1);
        return isEnabled;
    }
    /**
     * 飞行模式开关
     * @param setAirPlane
     */
    public void toggleAirplaneMode(boolean setAirPlane) {
        Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, setAirPlane ? 1 : 0);
        // 广播飞行模式信号的改变,让相应的程序可以处理。
        // 不发送广播时,在非飞行模式下,Android 2.2.1上测试关闭了Wifi,不关闭正常的通话网络(如GMS/GPRS等)。
        // 不发送广播时,在飞行模式下,Android 2.2.1上测试无法关闭飞行模式。
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        // intent.putExtra("Sponsor", "Sodino");
        // 2.3及以后,需设置此状态,否则会一直处于与运营商断连的情况
        intent.putExtra("state", setAirPlane);
        context.sendBroadcast(intent);
    }
}
时间: 2024-08-04 08:34:49

[Android Traffic] Android网络开启、关闭整理的相关文章

[Android Traffic] 根据网络类型更改下载模式

转载自: http://blog.csdn.net/kesenhoo/article/details/7396321 Modifying your Download Patterns Based on the Connectivity Type [根据连接的网络类型来更改下载模式] 并不是所有的网络类型(Wi-Fi,3G,2G,etc)对电量的消耗是同等的.不仅仅Wi-Fi电波比无线电波消耗的电量要少很多,而且不同的无线电波(3G,2G,LTE……)也存在使用不同电量的区别. Use Wi-Fi

[Android Traffic] android 流量计算方法

android流量简介 流量统计文件:路径/proc/net/dev 打开文件,其中 lo 为本地流量, rmnet0 为3g/2g流量, wlan0 为无线流量. 在/sys/class/net/下 可以找到相关类别(如rmnet0)的目录.在其子目录statistics下游rx_bytes和tx_bytes记录收发流量. 在/proc/uid_stat/{uid}/tcp_rcv记录该uid应用下载流量字节,/proc/uid_stat/{uid}/tcp_snd有该uid应用上传流量字节

Android网络开启、关闭整理

近段时间由于要对手机网络状况进行判断.开启和关闭,从网上找了些资料,现整理如下 包含了对WiFi.GPRS.飞行模式的开启.关闭以及一些状态的检测,在小米和三星平板上测试均通过 [java] view plaincopy package com.my.device_admin.business; import java.lang.reflect.Method; import android.content.Context; import android.content.Intent; impor

Android -- Service的开启关闭与生命周期

Service是Android 系统中的四大组件之一,是在一段不定的时间运行在后台,不和用户交互应用组件. service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化等等. 生命周期                                                                                  context.startService() 启动流程: con

Android IntentService 与Alarm开启任务关闭任务

1:MyService public class MyService extends IntentService{ AlarmManager alarmManager = null; PendingIntent alarmIntent = null; public MyService(){ super("MyService"); } public MyService(String name){ super(name); } @Override public IBinder onBind

常见Android面试题及答案(详细整理)

常见Android面试题及答案(详细整理) 1. 请描述一下Activity 生命周期. 答: 如下图所示.共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy(). onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问. onStart(): Activity变为在屏幕上对用户可见时调用. o

android 监听网络状态的变化及实战

android 监听网络状态的变化及实际应用 转载请注明博客地址:http://blog.csdn.net/gdutxiaoxu/article/details/53008266 平时我们在请求错误的情况下,通常会进行处理一下,一般来说,主要分为两方面的错误 - 没有网络的错误 - 在有网络的情况下,我们客户端的错误或者服务器端的错误 今天这篇博客主要阐述以下问题 怎样监听网络状态的变化,包括是否打开WiFi,否打开数据网络,当前连接的网络是否可用 网络没有打开情况下的处理,如弹出对话框,跳转到

Android 各大网络请求库的比较及实战,android请求库实战

自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,之前使用HttpClient.

Android中判断网络连接是否可用及监控网络状态

Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android中判断网络连接是否可用及监控网络状态,感兴趣的朋友可以参考下 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"