关于android监听网路状态的代码

Android之TelephonyManager类的方法详解,移动端跨平台开发现状 info.getPsc(); //获取邻居小区信号强度 info.getRssi(); } //返回ISO标准的国家码,即国际长途区号 tm.getNetworkCountryIso(); //返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI) tm.getNetworkOperator(); //返回移动网络运营商的名字(SPN) tm.getNetworkOperatorName(); /** * 获取网络类型 * * NETWORK_TYPE_CDMA 网络类型为CDMA 阅读详情
  • 这里写出了监听网路状态wifi 2 3 4 g 的所有网路监听

    • 需要添加权限的!!!
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
public interface NetStateListener {

    /**
     * 当网络类型发生改变的时候回调
     *
     * @param type 网络类型
     */
    public void onNetworkState(NetStateController.NetworkType type);
}
  • 然后下面就是网路状态变化的管理者,比较多,不过 拿去复制粘贴救可以用了!!
/**
 * 网络改变监听管理类
 * 该类去注册BroadReceiver来监听网络的改变,不需要再在所有需要监听网络变化的类去亲自注册broadreceiver.
 * 只需要实现NetStateListener接口,然后调用该类的addOnNetworkStateListener();即可在重写的onNetworkState方法中获取到最新的网络状态
 * 如果不需要再继续监听 调用removeOnNetworkStateListener() 即可.
 * @author bb
 *
 */
public class NetStateController {

    private final static String TAG = NetStateController.class.getSimpleName();
    private final static boolean DEBUG = true;
    private static ArrayList<NetworkType> mNetworkTypes = new ArrayList<NetworkType>();
    /**
     * 在网络状态发生变化的地方调用 {@link OnNetworkStateListener#onNetworkState(NetworkType)}
     * 方法
     */
    /**
     * 观察者list
     */
    private ArrayList<NetStateListener> mNetworkStateListeners = new ArrayList<NetStateListener>();

    private static NetStateController manager; 
    private static Context mContext;

    private NetStateController() {
    };

    /**
         * 获取{@link NetStateController}唯一实例
         *
         * @return 返回{@link NetStateController}唯一实例
         */
    public static NetStateController getInstance(Context context) {
        if (manager == null) {
            synchronized (NetStateController.class) {
                if (manager == null) {
                    manager = new NetStateController();
                    if(context!=null)
                        mContext = context.getApplicationContext();
                }
                return manager;
            }
        }
        return manager;

    }

    /**
     * 启动网络类型监听,startService
     */
    private void startNetworkTypeService() {
        if (DEBUG) {
            Log.i(TAG, "startNetworkTypeService()");
        }
        if(mContext==null)
            throw new NullPointerException("mContext is null");
        IntentFilter mFilter = new IntentFilter();
        mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        mContext.registerReceiver(mReceiver, mFilter);

    }

    private void stopNetworkTypeService() {
        if (DEBUG) {
            Log.i(TAG, "stopNetworkTypeService");
        }
        if(mContext==null)
            throw new NullPointerException("mContext is null");
        if (mReceiver != null) {
            try {
                mContext.unregisterReceiver(mReceiver);
            } catch (Exception e) {
                Log.w(TAG, "Receiver not registered ");
            }
        }
    }

    /**
     * 往观察者队列中添加观察者
     */
    public void addOnNetworkStateListener(NetStateListener mListener) { 
        if (mNetworkStateListeners != null) {
            // 如果为0 则调用启动系统上下文 注册全局监听。
            if (mNetworkStateListeners.size() == 0)
                startNetworkTypeService();
            if (mNetworkStateListeners.indexOf(mListener) == -1) {
                mNetworkStateListeners.add(mListener);
            }

        }
    }

    /**
     * 移除一个观察者
     */
    public void removeOnNetworkStateListener(NetStateListener mListener) {
        if (mNetworkStateListeners != null) {
            int index = mNetworkStateListeners.indexOf(mListener);
            if (index >= 0) {
                mNetworkStateListeners.remove(index);
                if (mNetworkStateListeners.size() == 0){
                    stopNetworkTypeService();
                    mNetworkTypes.clear();
                }
            }

        }
    }

    /**
     * 移除全部观察者
     * 
     */
    public void removeAllListener() {
        if (mNetworkStateListeners != null) {
            mNetworkStateListeners.clear();
            stopNetworkTypeService();
        }
    }

    /**
     * 介乎
     */
    /**
     * 枚举网络类型</br> NET_NO:没有网络</br> NET_2G:2g网络</br> NET_3G:3g网络</br>
     * NET_4G:4g网络</br> NET_WIFI:wifi</br> NET_UNKNOWN:未知网络
     */
    public enum NetworkType {
        NET_NO, NET_WIFI, NET_2G, NET_3G, NET_4G, NET_UNKNOWN;
    }
    /**
     * 网络类型 主要用来区分 外网(包括普通wifi和移动网络),i-Liaoning,以及CMMB. 新增了本地类型
     */
    public enum ChannelType{
        Public_Type,ILiaoning_Type,CMMB_TYPE,NO_TYPE,UNKNOWN_TYPE,LOCAL_TYPE;
    }

    /**
     * 判断当前是否网络连接
     * 

     * @return 状态码
     */
    public static NetworkType isConnected(Context context) {
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo ni = mConnectivityManager.getActiveNetworkInfo();

        NetworkType stateCode = NetworkType.NET_NO;
        if (ni != null && ni.isConnectedOrConnecting() && ni.isAvailable()) {
            switch (ni.getType()) {
            case ConnectivityManager.TYPE_WIFI:
                stateCode = NetworkType.NET_WIFI;
                break;
            case ConnectivityManager.TYPE_MOBILE:
                switch (ni.getSubtype()) { 
                case TelephonyManager.NETWORK_TYPE_GPRS: // 联通2g
                case TelephonyManager.NETWORK_TYPE_CDMA: // 电信2g
                case TelephonyManager.NETWORK_TYPE_EDGE: // 移动2g
                case TelephonyManager.NETWORK_TYPE_1xRTT:
                case TelephonyManager.NETWORK_TYPE_IDEN:
                    stateCode = NetworkType.NET_2G;
                    break;
                case TelephonyManager.NETWORK_TYPE_EVDO_A: // 电信3g
                case TelephonyManager.NETWORK_TYPE_UMTS:
                case TelephonyManager.NETWORK_TYPE_EVDO_0:
                case TelephonyManager.NETWORK_TYPE_HSDPA:
                case TelephonyManager.NETWORK_TYPE_HSUPA:
                case TelephonyManager.NETWORK_TYPE_HSPA:
                case TelephonyManager.NETWORK_TYPE_EVDO_B:
                //NETWORK_TYPE_EHRPD
                case 14:
                //NETWORK_TYPE_HSPAP
                case 15:
                    stateCode = NetworkType.NET_3G;
                    break;
                //NETWORK_TYPE_LTE
                case 13:
                    stateCode = NetworkType.NET_4G;
                    break;
                default:
                    stateCode = NetworkType.NET_UNKNOWN;
                }
                break;
            default:
                stateCode = NetworkType.NET_UNKNOWN;
            }
        }
        return stateCode;
    }

   /**
    *  获得当前的类型
    *  
    */
    public static String getTheChannelType(Context context){
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo ni = mConnectivityManager.getActiveNetworkInfo();
        ChannelType mChannelType = ChannelType.UNKNOWN_TYPE;
        if (ni != null && ni.isConnectedOrConnecting() && ni.isAvailable()) {
            switch (ni.getType()) {
            case ConnectivityManager.TYPE_WIFI:
                WifiManager mWifiManager =(WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                WifiInfo mWifiInfo = null;
                if (mWifiManager != null) {
                   mWifiInfo = mWifiManager.getConnectionInfo();
                   String wifiName = mWifiInfo.getSSID();
                   if(wifiName.contains("i-LiaoNing")){
                       mChannelType = ChannelType.ILiaoning_Type;
                   }else if (wifiName.contains("CMMB")) {
                      mChannelType = ChannelType.CMMB_TYPE;
                   } else {
                    mChannelType = ChannelType.Public_Type;
                   }
                }  
                break;
            case ConnectivityManager.TYPE_MOBILE:
                switch (ni.getSubtype()) {
                case TelephonyManager.NETWORK_TYPE_GPRS: // 联通2g
                case TelephonyManager.NETWORK_TYPE_CDMA: // 电信2g
                case TelephonyManager.NETWORK_TYPE_EDGE: // 移动2g
                case TelephonyManager.NETWORK_TYPE_1xRTT:
                case TelephonyManager.NETWORK_TYPE_IDEN:
                    mChannelType = ChannelType.Public_Type;
                    break;
                case TelephonyManager.NETWORK_TYPE_EVDO_A: // 电信3g
                case TelephonyManager.NETWORK_TYPE_UMTS:
                case TelephonyManager.NETWORK_TYPE_EVDO_0:
                case TelephonyManager.NETWORK_TYPE_HSDPA:
                case TelephonyManager.NETWORK_TYPE_HSUPA:
                case TelephonyManager.NETWORK_TYPE_HSPA:
                case TelephonyManager.NETWORK_TYPE_EVDO_B:
                //NETWORK_TYPE_EHRPD
                case 14:
                //NETWORK_TYPE_HSPAP
                case 15:
                    mChannelType = ChannelType.Public_Type;
                    break;
                //NETWORK_TYPE_LTE
                case 13:
                    mChannelType = ChannelType.Public_Type;
                    break;
                default:
                    mChannelType = ChannelType.UNKNOWN_TYPE;
                    break; 
              }

            } 
          return mChannelType.name();
        }else {
            mChannelType = ChannelType.NO_TYPE;
            return mChannelType.name();
        }
    }

    /**
     * 监听网络类型改变的广播
     */
    private BroadcastReceiver mReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {

                NetworkType netState = isConnected(context);
                synchronized (NetStateController.class) {
                    mNetworkTypes.add(netState); 
                    if (mNetworkStateListeners != null&&whetherOrNotoprocess()) {
                        for (NetStateListener listener : mNetworkStateListeners) {
                            listener.onNetworkState(netState);
                        }
                    }
                }

                if (DEBUG) {
                    Log.i(TAG,
                            "Network status changes,the current network is : "
                                    + netState);
                }
            }
        }
    }; 
    private static boolean whetherOrNotoprocess(){
        int mTypesSize = mNetworkTypes.size(); 
        switch (mTypesSize) {
        case 0:
            return false;
        case 1:
            return true;
        default: 
             if(mNetworkTypes.get(mTypesSize-1).toString().equals(mNetworkTypes.get(mTypesSize-2).toString())){
                 return false;
             }else {
                return true;
            }

        }
    }

}
  • 然后就是调用了
public class MainActivity extends AppCompatActivity implements NetStateListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NetStateController.getInstance(this).addOnNetworkStateListener(this);

    }

    @Override
    public void onNetworkState(NetStateController.NetworkType type) {
        switch (type) {
            case NET_NO:
                Toast.makeText(this, "no network", Toast.LENGTH_SHORT).show();
                break;
            case NET_WIFI:
                Toast.makeText(this, "wifi", Toast.LENGTH_SHORT).show();
                break;
            case NET_2G:
                Toast.makeText(this, "2ggg", Toast.LENGTH_SHORT).show();
                break;
            case NET_3G:
                Toast.makeText(this, "3ggg", Toast.LENGTH_SHORT).show();
                break;
            case NET_4G:
                Toast.makeText(this, "4gggg", Toast.LENGTH_SHORT).show();
                break;
            case NET_UNKNOWN:Toast.makeText(this, "unknown", Toast.LENGTH_SHORT).show();
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        NetStateController.getInstance(this).removeOnNetworkStateListener(this);
    }
}
Android 点击按钮传送按钮名称到子页面,子页面调用网路请求怎样处理详细代码 android点击按钮传送按钮名称到子页面,子页面调用网路请求怎样处理详细代码 阅读详情

相关推荐

【Android】Android 监听网络状态+源代码

【Android】Android 监听网络状态+源代码

TelephonyManager类详解

TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。    TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是有些通讯信息的获取对应用程序的权限有一定的限制,在开发的时候需要为其添加相应的权限。以下列出TelephonyManag

jackinpeace的专栏 3194

基于UWB技术的自动跟随避障系统设计研究

基于UWB技术的自动跟随避障系统设计研究 摘要:目前我国针对自动跟随避障系统方面的研究较少,同时国内自动跟随避障系统仍然处在未成熟阶段,多数仍停留在应用蓝牙控制或摄像头捕捉这类跟随方式,但这类方式在实际应用过程中往往会出现易受干扰,精度差,易受环境干扰等问题,这不仅会降低自动跟随避障系统的性能,同时也会对用户造成诸多困扰。因此,就需要结合目前较为有效的UWB技术,对自动跟随避障系统进行设计。基于此,本文首先将会针对UWB技术展开概述,而后对基于UWB技术的自动跟随避障系统组成展开分析,进而对基于UWB技术的

qq_43543515的博客 7992

Android程序中实时监控网络状态

在Android程序开发中我们经常要实时监控网络的状态,从而实时的对网络的状态进行提醒信息,如果我们只是写在Application中则它只会监控我们第一次登陆App时的网络状态,而不会实时的监控网络状态,这样我们在程序中无法获得实时网络状态,因此我们需要使用广播(BroadCastReceiver)来进行网络的实时监控: 第一种方法: class NetworkStateReceiver ex

fuzhongbin的博客 5464

DaVinci Configurator BswM模块配置

BswM是AUTOSAR(Automotive Open System Architecture)系统架构中的模块之一,它是基础软件模块(BSW)之一。BswM全称为Basic Software Module Manager(基础软件模块管理器),它负责管理和协调其他BSW模块的行为和交互,以实现整个系统的功能。BswM可以被看作是一个状态机,通过监控系统的状态和事件触发,来控制其他BSW模块的运行状态和互相配合,以达到整个系统的预期行为。

qq_59258431的博客 3947

银河麒麟v10-arm版离线安装Portainer

银河麒麟v10-arm版离线安装Portainer

q_hsolucky的博客 3051

网络连接的判断及网络类型的判断

直接调用以下方法即可//这是一个方法 public void checkMobileNet() { // 1.得到系统服务ConnectivityManager ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

污鸦的博客 2133

一网打尽身份验证与授权:深入剖析ASP.NET Core Identity在C#中的全方位实战应用

ASP.NET Core Identity 是 Microsoft 提供的一个强大且可扩展的身份验证和授权框架,用于构建基于用户账户、角色和权限的Web应用程序。它提供了用户注册、登录、密码管理、多因素认证、角色分配、授权等功能,与ASP.NET Core框架深度集成,简化了安全相关的开发工作。通过上述代码示例和注释,展示了如何安装配置Identity、自定义用户实体与数据库上下文、实现用户注册登录、管理角色与用户角色关系,以及如何使用授权策略保护应用程序资源。,并指定用户和角色类型以及主键类型。

java专栏 1528

Android判断网络状态监听网路状态

在Android开发过程中,为了用户体验,比如微信等软件,都会在网络不可用或有问题时,提示用户不可用,因此开发者需要判断网络状态并且实时监听,网上也搜了很多方法,比如使用。,也有使用ping一个外网链接比如百度的,还有通过DNS连接来判断的,但是发现都不是很好用,尤其是ping的,很不优雅,有时候返回结果还不一定正确。以上就完成了网络状态的监听,怎么样,可以试试看是否好用。最后找到一个方法,亲测比较好使,分享出来。,并且重写里面的方法(主要是。第二步:注册监听(我选择在。第一步:新建一个类继承。

xiaoerbuyu1233的博客 1906

Dify 实战:使用 Firecrawl 插件高效爬取微信公众号文章

本文介绍了如何利用Dify平台和Firecrawl插件构建微信公众号文章自动化采集系统。Dify作为开源LLM应用开发平台,结合Firecrawl的智能网页爬取能力,可轻松实现文章爬取、清洗和结构化存储。文章详细讲解了环境部署、插件安装以及工作流创建过程,通过可视化节点操作即可完成从URL输入到Markdown格式输出的全流程。该方案无需复杂代码,能有效解决反爬、动态渲染等问题,适用于知识库构建、模型训练等场景,显著提升开发效率。

SmartSi 1826

YOLO11优化:特征融合 | 金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块 | 25年7月最新成果

我们提出金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块,通过由粗到细的 token 选择机制和共享注意力参数,在大幅降低计算量的同时保留空间细节。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1062

Flutter 学习之旅 之 flutter 使用 connectivity_plus 进行网路状态监听(断网/网络恢复事件监听)

Flutter 是一款开源的 UI 软件开发工具包,由 Google 开发和维护。它允许开发者使用一套代码同时构建跨平台的应用程序,包括移动设备(iOS 和 Android)、Web 和桌面平台(Windows、macOS 和 Linux)。Flutter 使用 Dart 编程语言,它可以将代码编译为 ARM 或 Intel 机器代码以及 JavaScript,从而实现快速的性能。

仙魁XAN 2508

Android11原生设置屏幕亮由Gamma变化改为线性变化

从Android9 开始屏幕亮度调解变成非线性变化,这样的话就会出现 之前亮度变化很小,到后面时变化亮度很快; 修改为线性变化,只需要修改 ./frameworks/base/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache L

Android 4926

Android判断网络状态监听网路状态(最新教程)

提示:上就是今天要讲的内容,本文简单介绍了监听网络的方法,大家可以试一试。

学无止境 1685

[ 人力资源面试篇 ] HR 面试题分析详解大集合,看完直怼面试官(二)

那么在这个系列的文章中,我们聊到 HR 面谈什么?并且总结了五十个常见的人力资源面试题,在这里分享给大家。

qq_51577576的博客 1380

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android监听网络变化

最近在做APP,需要监听Android手机网络的变化情况,同时对不同的情况做出不同的响应策略,这里有两种方法。 1.BroadcastReceiver 2.Service+BroadcastReceiver

Notzuonotdied的博客 1467

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android全局网络监听框架

在日常项目开发中,我们经常需要根据网络状态或网络类型的变化做出一些动作,可能很多小伙伴和我一样是用过工具类封装一些方法来实现的,而今天我要分享最近学到的更为优雅的实现方式,即监听全局网络变化框架。 我们还是先看下这个框架的项目结构 关于这个架构我们的思路是这样的,以MainActivity这个界面为例 public class MainActivity extends BaseActivity {...

qq_27246079的博客 1846

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

安卓项目实战之:安卓7.0优化下的全局网络连接状态监听

1,添加权限 &amp;amp;amp;amp;lt;!-- 访问网络. --&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;uses-permission android:name=&amp;amp;amp;quot;android.permission.INTERNET&amp;amp;amp;quot; /&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;!-- 访问WiF

智玲君 1106

NetStateReceiver【监听网路状态变化】

版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 用来监控网络变化时的处理,一般用来toast提示或者扩展为其他作用。 效果图    代码分析 NetStateReceiver:网络改变时的广播器 NetUtils:获取网络类型 使用步骤 一、项目组织结构图 注意事项: 1、导入类文件后需要change包名以及重新import R文件路径 2、Valu...

weixin_34050389的博客 295

Android---动态注册监听网路变化的广播

package com.mycompany.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.suppo

strong90的博客 637

初识广播机制(监听网络状态的改变,监听网络是否可以使用)

Android系统中的广播机制比较灵活,因为Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应用程序的。Android提供了一套完整的API,允许应用程序自由地发送和接收广播。 广播的类型主要可以分为以下两种: 1.标准广播(无序广播)  特点:无序、异步,几乎同时接收到 2:.有序广播...

Android_小牧的博客 1246

不用BroadcastReceiver,纯使用service来达到实时监听系统网络状态

1 缘由 最近笔者在学Android开发课,有一个上机作业的要求就是“不用BroadcastReceiver,纯使用service来达到实时监听系统网络状态”,笔者本着能CV就CV的原则,查了半天的优快云、博客园……结果千篇一律使用BroadcastReceiver来达到实时监听系统网络状态,没有纯使用service来监听网络状态,于是便有了本篇博文。 2 效果演示 有网络的时候,正常显示 无网络的时候,显示textView,提示没网络 3 功能分析 由于题目不允许直接使用BoardcastRecei

qq_43454276的博客 1265

Android监听网络状态变化,随着网络的变化做一些其他处理(亲测可用)

用广播实现,我已经把这个作为一个同用的类了,只需要在需要监听网络变化的类里设置下监听回调即可。以下是代码:import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManager;import...

chailongger的博客 3250

简单 android 广播监听网络状态变化

NetWorkReceiver import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import

韶羲的IT之路 508

Android 实时网路监测类 步骤三(BaseActivity 实现 广播接口NetWorkBroadcastReceiver)

3.0实时监测网络状态及当前网络类型 在清单文件添加权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 注册广播接收者 <activity android:name=".BaseActivity"></activity>

普羅●米修斯 ——— HelloWorld 1万+
上一篇: 设置android系统时间
下一篇: 关于android原生VideoView解决卡顿现象
buttonXin
博客等级 码龄11年 13粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值