android 4.4 有线网络开发总结(电视盒子)

S905L电视盒子刷机实战:Android TV与EmuELEC双系统改造指南 固件刷写是赋予老旧硬件新生的关键技术,其核心原理在于替换设备原有的操作系统镜像。通过线刷工具将定制固件写入存储介质,可以彻底改变设备的功能定位与用户体验。这一技术对于挖掘硬件潜力、延长设备生命周期具有重要价值,尤其在智能电视盒子、路由器等消费电子领域应用广泛。以搭载晶晨S905L芯片的运营商电视盒子为例,通过识别板型与无线模块、准备匹配的Android TV固件与EmuELEC游戏系统镜像,利用短接法进入刷机模式并完成写入,即可实现从单一功能设备到集流媒体播放与复古游戏机于一体的全能终端改造。过程中,精准匹 阅读详情

开发背景:电视应用必须兼容公司过去已经发行的4.4盒子,除了文件管理,wifi,有线,蓝牙所有用到6.0系统jar的功能全都不能用,4.4系统不能提供对应jar包给我,具体原因不明

开发需求:获取ip地址,子网掩码,默认网关,dns服务器:

4.4有线网络是有开关功能的,而6.0是没有的。因此需要判定当前以太网是否打开,如果没打开就让他打开

        if (!isEthernetEnable()){
           mEthernetManager.setEthernetEnabled(true);
        }
    private boolean isEthernetEnable() {
        boolean isEthernetEnable = false;
        if (mEthernetManager == null) {
        } else {
            isEthernetEnable = (mEthernetManager.getEthernetIfaceState() == EthernetDataTracker.ETHER_IFACE_STATE_UP);
        }
        Log.i(TAG, "当前有线是否开启:" + isEthernetEnable);
        return isEthernetEnable;
    }

 

package com.ygjy.setting4_0;

import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.EthernetDataTracker;
import android.net.ethernet.EthernetManager;
import android.os.SystemProperties;
import android.provider.Settings1;
import android.util.Log;


/**
 * @创建人:hcy
 * @创建时间:2018/11/6
 * @作用描述:Function 4.4有线的工具类
 **/
public class EthernetHelper {
    private EthernetManager mEthernetManager;
    private Context mContext;
    private BroadcastReceiver mReceiver;
    private static final String TAG = "Ethernet4_4Helper:>>";
    private ContentResolver mContentResolver;

    public boolean getConnectMode() {
       return getNetState()==Net_State.dynamic_state;
    }

    private void unRegisterEthernetReceiver(Context context) {
        if (null != mReceiver) {
            context.unregisterReceiver(mReceiver);
        }
    }

    public void recycler(Context context) {
        unRegisterEthernetReceiver(context);
    }

    private enum Net_State {
        dynamic_state, static_state;
    }

    public EthernetHelper(Context mContext) {
        this.mContext = mContext;
        mContentResolver = mContext.getContentResolver();
        mEthernetManager = (EthernetManager) mContext.getSystemService("ethernet");

        registerEthernetReceiver();
    }

    public void registerEthernetReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(EthernetDataTracker.ETHERNET_STATE_CHANGED_ACTION);
        if (mReceiver == null) {
            mReceiver = new EthernetReceiver();
        }
        mContext.registerReceiver(mReceiver, filter);
    }

    private class EthernetReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(EthernetDataTracker.ETHERNET_STATE_CHANGED_ACTION)) {
                // 取得当前以太网状态
                int state = intent.getIntExtra(EthernetDataTracker.EXTRA_ETHERNET_STATE, 0);
                switch (state) {
                    case EthernetDataTracker.ETHER_STATE_CONNECTED: //已连接
                        Log.e(TAG, "有线连接成功");
                        if (null != mCallback) {
                            mCallback.onConnected(getIP(), getMask(), getGateway(), getDns1(), getDns2());
                        }
                        break;
                    case EthernetDataTracker.ETHER_STATE_CONNECTING:
                        Log.e(TAG, "有线连接中");
                        if (null != mCallback) {
                            mCallback.onConnecting();
                        }
                        break;
                    case EthernetDataTracker.ETHER_STATE_DISCONNECTED: //未连接
                        Log.e(TAG, "有线断开");
                        if (null != mCallback) {
                            mCallback.onDisconnected(mNullInfo, mNullInfo, mNullInfo, mNullInfo, mNullInfo);
                        }
                        break;
                }
            }
        }
    }

    //空
    private String mNullInfo = "0.0.0.0";

    /*ip
     */
    public String getIP() {
        Net_State netState = getNetState();
        if (netState == Net_State.static_state) {
            return getStaticIp();
        } else if (netState == Net_State.dynamic_state) {
            return getDHCPIP();
        } else {
            return mNullInfo;
        }
    }

    //子网掩码
    public String getMask() {
        Net_State netState = getNetState();
        if (netState == Net_State.dynamic_state) {
            return getDHCPMask();
        } else if (netState == Net_State.static_state) {
            return getStaticMask();
        } else {
            return mNullInfo;
        }
    }

    //网关
    public String getGateway() {
        Net_State netState = getNetState();
        if (netState == Net_State.dynamic_state) {
            return getDHCPGateway();
        } else if (netState == Net_State.static_state) {
            return getStaticGateway();
        } else {
            return mNullInfo;
        }
    }


    public String getDns1() {
        Net_State netState = getNetState();
        if (netState == Net_State.dynamic_state) {
            return getDHCPDns1();
        } else if (netState == Net_State.static_state) {
            return getStaticDns1();
        } else {
            return mNullInfo;
        }
    }

    public String getDns2() {
        Net_State netState = getNetState();
        if (netState == Net_State.dynamic_state) {
            return getDHCPDns2();
        } else if (netState == Net_State.static_state) {
            return getStaticDns2();
        } else {
            return mNullInfo;
        }
    }

    private String getStaticDns2() {
        String mEthdns2 = Settings1.System.getString(mContentResolver,
                Settings1.System.ETHERNET_STATIC_DNS2);
        Log.e(TAG, "getStaticDns2: 静态DNS2" + mEthdns2);
        return mEthdns2;
    }

    private String getDHCPDns2() {
        String iface = mEthernetManager.getEthernetIfaceName();
        String tempDNS2Info = SystemProperties.get("dhcp." + iface + ".dns2");
        if ((tempDNS2Info != null) && (!tempDNS2Info.equals(""))) {
            Log.e(TAG, "getDHCPDns2: 动态DNS2:" + tempDNS2Info);
            return tempDNS2Info;
        } else {
            Log.e(TAG, "getDHCPDns2: 动态DNS2:" + mNullInfo);
            return mNullInfo;
        }
    }

    private String getStaticDns1() {
        String mEthdns1 = Settings1.System.getString(mContentResolver,
                Settings1.System.ETHERNET_STATIC_DNS1);
        Log.e(TAG, "getStaticDns1: 静态dns1::" + mEthdns1);
        return mEthdns1;
    }

    private String getDHCPDns1() {
        String iface = mEthernetManager.getEthernetIfaceName();
        String tempDNS1Info = SystemProperties.get("dhcp." + iface + ".dns1");
        if ((tempDNS1Info != null) && (!tempDNS1Info.equals(""))) {
            Log.e(TAG, "getDHCPDns1: 动态DNS1::" + tempDNS1Info);
            return tempDNS1Info;
        } else {
            Log.e(TAG, "getDHCPDns1: 动态DNS1::" + mNullInfo);
            return mNullInfo;
        }
    }

    private String getStaticGateway() {
        String mEthGateway = Settings1.System.getString(mContentResolver,
                Settings1.System.ETHERNET_STATIC_GATEWAY);
        Log.e(TAG, "getStaticGateway: 静态网关" + mEthGateway);
        return mEthGateway;
    }

    private String getDHCPGateway() {
        // 取得动态网关
        String iface = mEthernetManager.getEthernetIfaceName();
        String tempIpInfo = SystemProperties.get("dhcp." + iface + ".gateway");
        if ((tempIpInfo != null) && (!tempIpInfo.equals(""))) {
            Log.e(TAG, "getDHCPGateway: 动态网关" + tempIpInfo);
            return tempIpInfo;
        } else {
            Log.e(TAG, "getDHCPGateway: 动态网关" + mNullInfo);
            return mNullInfo;
        }
    }

    private String getStaticMask() {
        String mEthNetmask = Settings1.System.getString(mContentResolver,
                Settings1.System.ETHERNET_STATIC_NETMASK);
        Log.e(TAG, "getStaticMask: 静态子网掩码" + mEthNetmask);
        return mEthNetmask;
    }

    private String getDHCPMask() {
        // 取得动态子网掩码
        String iface = mEthernetManager.getEthernetIfaceName();
        String tempMaskInfo = SystemProperties.get("dhcp." + iface + ".mask");
        if ((tempMaskInfo != null) && (!tempMaskInfo.equals(""))) {
            Log.e(TAG, "getDHCPMask: 动态子网掩码" + tempMaskInfo);
            return tempMaskInfo;
        } else {
            Log.e(TAG, "getDHCPMask: 动态子网掩码" + mNullInfo);
            return mNullInfo;
        }
    }


    private String getDHCPIP() {
        // 取得动态IP地址
        String iface = mEthernetManager.getEthernetIfaceName();
        String tempIpInfo = SystemProperties.get("dhcp." + iface + ".ipaddress");
        if ((tempIpInfo != null) && (!tempIpInfo.equals(""))) {
            Log.e(TAG, "getDHCPIP: 动态ip地址::" + tempIpInfo);
            return tempIpInfo;
        } else {
            Log.e(TAG, "getDHCPIP: 动态ip地址::" + mNullInfo);
            return mNullInfo;
        }
    }

    private String getStaticIp() {
        String mEthIpAddress = Settings1.System.getString(mContentResolver,
                Settings1.System.ETHERNET_STATIC_IP);
        Log.e(TAG, "getStaticIp: 静态ip地址为" + mEthIpAddress);
        return mEthIpAddress;
    }



    public  Net_State getNetState() {
        // 是否使用静态IP
        int useStaticIp = Settings1.System.getInt(mContentResolver,
                Settings1.System.ETHERNET_USE_STATIC_IP, 0);
        if (useStaticIp == 1) {
            Log.e(TAG, "getNetState: 静态网络");
            return Net_State.static_state;
        } else {
            Log.e(TAG, "getNetState: 动态网络");
            return Net_State.dynamic_state;
        }
    }

    private OnEthernetChangedCallback mCallback;

    public void setCallback(OnEthernetChangedCallback callback) {
        mCallback = callback;
    }

    public interface OnEthernetChangedCallback {
        //连接中
        void onConnecting();

        //已连接
        void onConnected(String ip, String mask, String gateway, String dns1, String dns2);

        //断开中
        void onDisconnecting();

        //已断开
        void onDisconnected(String ip, String mask, String gateway, String dns1, String dns2);
    }
}

 

 

 

 

手把手教你用开心电视助手给移动UNT401H盒子装哔哩哔哩TV版(附IPTV配置) 本文详细介绍了如何使用开心电视助手为移动UNT401H电视盒子安装哔哩哔哩TV版并配置IPTV功能。通过刷机后的系统优化、应用安装及直播源配置,让旧盒子焕发新生,成为全能娱乐终端。特别适合想要提升电视盒子功能的用户参考。 阅读详情

相关推荐

告别卡顿!在PC上流畅运行安卓TV应用:Android TV x86 9 R3安装与ARM兼容层配置全攻略

本文详细介绍了在X86架构PC上安装和优化Android TV x86 9 R3系统的完整指南,重点解决ARM应用兼容性问题。通过Houdini转译层配置、系统服务精简和性能调优,实现在PC上流畅运行安卓TV应用,提升用户体验。

weixin_30378623的博客 888

Android TV开发总结(四)通过RecycleView构建一个TV app列表页(仿腾讯视频TV版)

前言:上一篇中,介绍了TV开发的焦点一些坑,很多人在公众号反应写一篇关于RecycleView相关的案例,今天就来实现用RecycleView+GridLayoutManger仿腾讯视频TV版(云视听·极光)的电视剧的列表页 先看下云视听·极光的电视剧列表页的效果图:

欢迎关注公众号:【码农突围】,公号后台回复9999,可以获取一份500页的LeetCode刷题笔记。 1万+

andorid4.4 ethernet

andorid4.4 ethernet-service ethernet-settings以及systemui ethernet通知及资源文件

积累一些关于ANDROID TV开发的经验

新公司业务主要是电视端。之前也做过,但也是浅尝辄止。主要是recyclerview与焦点的控制 技术点: 1.上面导航栏遥控器切换,下面要刷新数据 2.内容的分类,分页(加载更多),上下滑动的时候导航栏跟着动 3.焦点选中效果 4.导航栏下按的时候,跳到内容的第一个item,同理第一排内容的item上按的时候跳到对应的导航栏 解决方案: 1.用一个rec...

SpringYang 5722

android4.4在设置里面增加ethernet

http://my.csdn.net/hclydao# 论坛中 红尘六欲 的资源,这打包备份了一下.

ZYNQ专题-7020驱动KSZ9031 PHY芯片

之所以有这篇文章,得益于Alinx的开发板。

Anitawen的博客 4961

android tv 云播放器,Android TV开发总结(六)构建一个TV app的直播节目实例

近年来,Android TV的迅速发展,传统的有线电视受到较大的冲击,在TV上用户同样也可以看到各个有线电视的直播频道,相对于手机,这种直播节目,体验效果更佳,尤其是一样赛事节目,大屏幕看得才够痛快,还可以邀几好友一起欣赏。今天将介绍构建一个TV app的直播节目实例,此实例上传到Github: https://github.com/hejunlin2013/LivePlayback 喜欢可以st...

weixin_30658759的博客 1173

7-1 链式基数排序 (20 分)

7-1 链式基数排序 (20 分) 实现链式基数排序,待排序关键字n满足1≤n≤1000,最大关键字数位≤5。 输入样例: 第一行输入待排序个数n(1≤n≤1000),再输入n个数(n的数位≤5)。 10 278 109 63 930 589 184 505 269 8 83 输出样例: 输出每趟分配-收集后链表中的关键字,趟数为序列中最大值的数位(如样例中930的数位为3),每行结尾有空格。 930 63 83 184 505 278 8 109 589 269 505 8 109 930 63 26

OwemShu的博客 4236

Android 4.4 Kitkat 使能有线网络 Ethernet

背景 Android kitkat 默认已经支持 Ethernet 有线网络,只要稍微配置,便可以直接使用,测试结果,网络浏览器和下载都没有没有问题,而且系统可以做到与 wifi 共存,互相不影响功能,这里简单介绍如何使能 Ethernet,并简要分析其代码和流程。 Linux 配置部分 Linux 需要能够支持有线网络,生成 eth 网络设备节点。 Android

增阅笔记 1万+

python-pptx库中文文档及使用样例

个人使用样例及部分翻译自官方文档,并详细介绍chart的使用

4万+

Autosar Davinci Configurator新建工程以及导入DBC和CDD

Autosar Davinci Configurator新建工程前言一、Autosar Davinci Configurator新建工程二、Autosar Davinci Configurator导入DBC和CDD1.引入库2.读入数据总结 前言 如何用 DavinciCFG 新建工程,以及导入DBC和CDD文件。 一、Autosar Davinci Configurator新建工程 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、Autosar Davinc

别再跑偏了的博客 1万+

Amlogic S9xxx电视盒子安装Armbian完整指南:从安卓TV到强大服务器

想要将闲置的Amlogic S9xxx电视盒子变身为功能强大的Linux服务器吗?amlogic-s9xxx-armbian项目为您提供了完美的解决方案。这个开源项目专门为Amlogic、Rockchip和Allwinner芯片的电视盒子构建Armbian系统镜像,让您轻松将安卓TV系统更换为专业的服务器操作系统。 ## 🚀 项目概述与核心价值 amlogic-s9xxx-armbian项目

gitblog_00441的博客 1144

OpenDRIVE车道计算避坑指南:为什么你的poly3曲线总对不齐?

本文深入解析OpenDRIVE标准中车道几何计算的三大核心难题:参数化三次多项式(ParamPoly3)的坐标系转换与参数映射、车道偏移与宽度的优先级判定,以及螺旋线(Spiral)接续的平滑性保障。通过实战案例与代码示例,提供了一套避免车道线错位与曲率不连续的精确计算与验证方法,是高精地图开发与仿真场景构建的实用避坑指南。

q9w8e7r6t5的博客 421

盘点2016年炙手可热的TV BOX电视盒子

随着时代的发展,电视盒子渐渐取代了传统的有线电视机顶盒,大多数家庭都用上的更为先进的电视盒子,但目前市面上的电视盒子品牌繁多,很多想买的人都不知道如何去挑选一款合适的盒子,为此我在这里从“品牌、硬件、口碑” 等角度,对几款比较火的盒子进行了仔细的对比,供大家参考选择。 一、小米盒子   外形&接口:小米盒子增强版采用了全新的外观设计,机身更薄。另外,AV线接口更换为3.5

koocan88的博客 3502

【Claude】Disabled organization 错误:组织被禁用的原因与 API Key 绕过方法

如果环境变量存在,下一步是找出它在哪里被设置的。"Disabled organization" 错误的本质不是账户被封,而是认证优先级冲突。环境变量优先级最高始终覆盖 OAuth 订阅认证报错信息具有误导性:"组织被禁用"指的通常是 API Key 所属的组织,而不是你的个人账户旧 Key 是隐形炸弹:即使你已经不再使用某个组织的 API,只要环境变量中残留该 Key,它就会持续覆盖你的订阅认证非交互模式更敏感claude -p模式下,只要有环境变量,就会强制使用它,完全忽略/login。

博客 8857

FastGPT智能体开发:FastGPT OpenAPI 知识库接口

FastGPT OpenAPI 知识库接口

王国平的博客 323

安卓 4.4.2 电视盒子 ADB 设置应用开机自启动

摘要:本文介绍在安卓4.4.2电视盒子上实现指定应用开机自启动的方法。通过ADB工具连接设备,获取应用启动入口,创建启动脚本并推送到系统分区,解决系统只读和权限问题。关键步骤包括开启ADB调试、获取Activity信息、挂载/system为可读写、配置脚本权限等。还提供了常见问题解决方案,如目录不存在、启动失败等。该方法无需修改应用,适用于大多数已root的旧版电视盒子。

α-geek的专栏 3331

用扩展点为 Fiori Elements 添加自定义动作:从原理到落地的完整实践

本文介绍了如何在基于OData V4的Fiori Elements应用中通过Extension Points添加自定义Action按钮。主要内容包括: 扩展点动作与标准注解动作的区别:扩展点用于非标准前端流程、组合操作等场景,需通过extensionAPI与框架交互。 扩展点动作的插入位置:可放置在List Report表格工具栏、Object Page页眉/页脚/Section工具栏等位置,并说明了相应的manifest.json配置节点。 配置模型与处理函数契约:详细说明了press、visible/e

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 248

my-tv 开源电视直播软件:安装与遥控器操作完整指南

my-tv 是一款开源电视直播应用,面向 Android TV 和电视盒子,主打"安装即可使用":不需要注册、不需要导入频道列表,打开就能看央视与主流卫视。本文适合第一次接触这类应用的新手,也适合想快速把家里老电视接上直播的普通用户。 ## 项目速览 一句话概括:my-tv 是一个为电视设备做的免费直播播放器,核心逻辑只有换台、看节目单和少量个性化设置,其余事情(信令、鉴权、节目单抓取)都在代

gitblog_00071的博客 1055

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

旧电脑别扔!用U盘给电视盒子刷个原生安卓TV x86系统(保姆级避坑指南)

本文详细介绍了如何将旧电脑改造为高性能安卓TV x86媒体中心,提供从系统选择、安装到优化的保姆级教程。通过原生安卓TV系统,用户可获得无广告体验、更强硬件性能和自由扩展能力,充分利用闲置设备实现零成本升级。

weixin_30439067的博客 689

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

my-tv:Android 电视免配置直播应用,U 盘拷入即可看央视卫视

my-tv 是一款开源的 Android 电视直播应用,面向电视与电视盒子,安装后即可直接观看央视、卫视等频道,无需账号与配置。运行前提:设备为 Android 5.0 及以上系统,并能正常联网。 ## 跑起来:U 盘安装与首次启动 **方法一:U 盘安装(最常用)** 1. 在电脑上下载 my-tv 最新版 APK 2. 将 APK 拷贝到 U 盘 3. 把 U 盘插入电视或盒子的 USB

gitblog_00544的博客 1039

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TVBoxOSC快速上手:3分钟把电视盒子变成轻量播放器

电视盒子买回来只会放本地视频?TVBoxOSC 是一款面向 Android 电视盒子的电视内容播放应用,装好之后用一个遥控器就能完成全部内容操作,让盒子真正成为客厅里的轻量媒体中心。 ## TVBoxOSC 能为你的盒子做什么 一句话概括:TVBoxOSC 是为电视盒子场景打造的 TVBox 系应用,把"遥控器 + 电视大屏"这套最传统的操作方式用到了极致。 - **遥控器友好界面**:全程

gitblog_00410的博客 352

my-tv电视直播软件安装与遥控器操作完整指南

my-tv是一款面向智能电视和电视盒子的开源电视直播软件,核心特点是**安装即可使用**:装上后打开就能看到央视、卫视等频道,不需要注册账号或配置任何参数。它支持Android 4.2及以上系统,覆盖市面上大多数主流电视品牌,当前最新版本为v2.1.0。本文按"装好→会用→修好"的顺序,把从安装到日常操作的细节讲一遍。 ## 📡 项目定位与兼容性 my-tv要解决的问题很具体:很多电视用户不

gitblog_00049的博客 856

电视盒子真能玩GBA吗?TVBoxOSC复古游戏模拟器实操详解

TVBoxOSC是一款面向安卓电视盒子的电视盒子模拟器,覆盖NES、SNES、GBA等从8位到32位的经典主机,1GB内存的低配盒子也能流畅跑《超级马里奥兄弟》《魂斗罗》这类老游戏。本文按"装软件→连手柄→跑起来→调画质→再折腾"的真实使用路径,把环境要求、游戏库设置、排障方法都嵌在流程里讲。只要你的盒子是Android 5.0以上、带蓝牙,半小时能跑通第一局。 ## 先把盒子的三个条件确认了

gitblog_01048的博客 953

如何快速安装电视直播应用:my-tv开源项目完整指南

还在为电视直播软件的选择而烦恼?想要一款安装简单、操作流畅的电视直播应用吗?今天给大家介绍一款超实用的开源电视直播软件——my-tv!这款Android TV应用不仅免费开源,而且安装即可使用,无需复杂的配置过程。无论你是新手还是普通用户,都能在10分钟内轻松上手,享受高清电视直播的乐趣。 ## 📺 为什么选择my-tv电视直播应用? my-tv是一款专为Android电视和电视盒子设计的开

gitblog_00331的博客 476

Amlogic盒子Armbian系统终极指南:从安卓TV到全能服务器一键转换

还在为电视盒子性能受限、系统卡顿而烦恼吗?amlogic-s9xxx-armbian项目让搭载Amlogic芯片的电视盒子焕发新生,变身为功能强大的全能服务器。本指南将为你提供完整的Armbian系统安装教程,涵盖从环境准备到系统优化的全流程,让你的闲置设备重获新生。 ## 环境准备与兼容性验证 ### 硬件要求清单 在开始安装前,请确保你已准备好以下硬件设备: - Amlogic S9xxx

gitblog_00622的博客 1216
上一篇: android 4.4 蓝牙开发总结(电视盒子)
下一篇: Android 积累盒子开发常用到的工具类
泡温泉的咸鱼
博客等级 码龄11年 39粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值