Android的本地网络组件

Stella981
• 阅读 595

java代码:

package com.hes.tools.net.interfaced;

public abstract interface INetWork {
    
    public abstract boolean openMobleNetwork();
    
    public abstract boolean closeMobleNetwork();
    
    public abstract boolean getNetworkConnected();
    
    public abstract boolean getMobleNetworkConnected();
    
    public abstract boolean getWifiNetworkConnected();
    
    public abstract boolean getWifiIsOpen();
    
    public abstract void openWifi();
    
    public abstract void closeWifi();
    
}

package com.hes.tools.net;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.net.wifi.WifiManager;
import android.util.Log;
import com.hes.tools.net.interfaced.INetWork;

/**
 * @author HES
 */
public class NetWork implements INetWork {
    
    private static NetWork network;
    private ConnectivityManager mCM;
    private WifiManager mWifiManager;
    
    private NetWork(Context context) {
        mCM = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    }
    
    public static NetWork getNetWork(Context context){
        if(network == null){
            network = new NetWork(context);
        }
        return network;
    }
    
    public boolean openMobleNetwork(){
        return mobleNetwork(true);
    }
    
    public boolean closeMobleNetwork(){
        return mobleNetwork(false);
    }
    
    public ConnectivityManager getConnectivityManager(){
        if(mCM != null){
            return mCM;
        }
        return null;
    }
    
    public WifiManager getWifiManager(){
        if(mWifiManager != null){
            return mWifiManager;
        }
        return null;
    }

    public boolean getNetworkConnected(){
        NetworkInfo netinfo = mCM.getActiveNetworkInfo();
        if(netinfo != null && netinfo.isConnected() && netinfo.isAvailable() && netinfo.getState() == State.CONNECTED){
            Log.d("TOOL", "network connected");
            return true;
        }
        return false;
    }
    
    public boolean getMobleNetworkConnected(){
        if(getNetworkConnected()){
            NetworkInfo info = mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            if(info.getState() == State.CONNECTED){
                Log.d("TOOL", "Moble network connected");
                return true;
            }
        }
        return false;
    }

    public boolean getWifiNetworkConnected(){
        if(getNetworkConnected()){
            NetworkInfo info = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            if(info.getState() == State.CONNECTED){
                Log.d("TOOL", "Wifi network connected");
                return true;
            }
        }
        return false;
    }
    
    public boolean getWifiIsOpen(){
        int state = mWifiManager.getWifiState();
        if(state == WifiManager.WIFI_STATE_ENABLED){
            return true;
        }
        return false;
    }
    
    public void openWifi(){
        mWifiManager.setWifiEnabled(true);
    }
    
    public void closeWifi(){
        mWifiManager.setWifiEnabled(false);
    }
    
    private boolean mobleNetwork(boolean status){
        boolean net = false;
        try {
            Class<?> conmanClass = Class.forName(mCM.getClass().getName());
            Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
            iConnectivityManagerField.setAccessible(true);
            Object iConnectivityManager = iConnectivityManagerField.get(mCM);
            Class<?> iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
            Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
            setMobileDataEnabledMethod.setAccessible(true);
            setMobileDataEnabledMethod.invoke(iConnectivityManager, status);
            net = true;
        } catch (Exception e) {
            net = false;
        }
        return net;
    }
    
    /**
     * 打开数据网络
     * @param context
     * @param en
     */
    @Deprecated
    public static void open(Context context, boolean en) {
        try {
            ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            Class<?> conmanClass = null;
            Field iConnectivityManagerField = null;
            Object iConnectivityManager = null;
            conmanClass = Class.forName(conman.getClass().getName());
            iConnectivityManagerField = conmanClass.getDeclaredField("mService");
            iConnectivityManagerField.setAccessible(true);
            iConnectivityManager = iConnectivityManagerField.get(conman);
            Class<?> iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
            Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
            setMobileDataEnabledMethod.setAccessible(true);
            setMobileDataEnabledMethod.invoke(iConnectivityManager, en);
        } catch (Exception e) {
        }
    }
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Java修道之路,问鼎巅峰,我辈代码修仙法力齐天
<center<fontcolor00FF7Fsize5face"黑体"代码尽头谁为峰,一见秃头道成空。</font<center<fontcolor00FF00size5face"黑体"编程修真路破折,一步一劫渡飞升。</font众所周知,编程修真有八大境界:1.Javase练气筑基2.数据库结丹3.web前端元婴4.Jav
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
Unity横屏
Android下发现Unity里面的Player设置,并不能完全有效,比如打开了自动旋转,启动的时候还是会横屏,修改XML添加以下代码<applicationandroid:icon"@drawable/ic\_launcher"                    android:label"@string/app\_name"
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这