27.多媒体(音乐播放器)

android多媒体音乐播放器(mediaPlayer)的三种类别的播放方法 一、简单的音乐播放器事例有 1、播放应用内的音频文件 2、播放SD卡的音频文件 3、播放网络的音频文件 下列的效果如图所示:下列是xml的布局文件 阅读详情

一.多媒体-音频播放概括


二.具体代码实现如下

代码文件树状图


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/sb_main_bar"
        /><!--进度条-->

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_media_play"
        android:onClick="playOrPause"
        />

</LinearLayout>

音乐播放器1.0版本

MainActivity.java

package com.zking.android27_playmusic;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void playOrPause(View view){
            ImageButton imageButton= (ImageButton) view;

            //实例化MediaPlayer
            if(mediaPlayer==null) {
                  mediaPlayer = MediaPlayer.create(this, R.raw.s1);
                  mediaPlayer.start();
                  //暂停图标
                  imageButton.setImageResource(android.R.drawable.ic_media_pause);
            }else if(mediaPlayer.isPlaying()){//下一次点击如果正在播放
                  mediaPlayer.pause();//暂停
                  //播放图标
                  imageButton.setImageResource(android.R.drawable.ic_media_play);
            }else{//第三次播放
                  mediaPlayer.start();//接着播放
                  //暂停图标
                  imageButton.setImageResource(android.R.drawable.ic_media_pause);
            }
    }


}

音乐播放器2.0(应用内音频文件)

让进度条动起来  实现快进 拖动 暂停

MainActivity.java

package com.zking.android27_playmusic;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
    private SeekBar sb_main_bar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar);//获取进度条

        sb_main_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            //进度改变
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }
            //开始滑
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }
            //停止滑
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                  //获取当前进度条的位置
                  int currentPosition=seekBar.getProgress();
                  //跳转到某个位置进行播放
                  mediaPlayer.seekTo(currentPosition);
            }
        });
    }

    public void playOrPause(View view){
            ImageButton imageButton= (ImageButton) view;

            //实例化MediaPlayer
            if(mediaPlayer==null) {
                  mediaPlayer = MediaPlayer.create(this, R.raw.s1);
                  mediaPlayer.start();
                  //暂停图标
                  imageButton.setImageResource(android.R.drawable.ic_media_pause);
                  //获取音乐的播放时间
                  int time=mediaPlayer.getDuration();
                  //设置进度条的最大值 为  音乐的播放时间
                  sb_main_bar.setMax(time);
                  //让线程跑起来
                  new MyThread().start();

            }else if(mediaPlayer.isPlaying()){//下一次点击如果正在播放
                  mediaPlayer.pause();//暂停
                  //播放图标
                  imageButton.setImageResource(android.R.drawable.ic_media_play);
            }else{//第三次播放
                  mediaPlayer.start();//接着播放
                  //暂停图标
                  imageButton.setImageResource(android.R.drawable.ic_media_pause);
            }
    }

    //子线程 让进度条动起来
    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            while(sb_main_bar.getProgress()<sb_main_bar.getMax()){//当前的进度<最大值 就 一直播放
                //获取音乐当前的播放位置
                int currentPosition=mediaPlayer.getCurrentPosition();
                sb_main_bar.setProgress(currentPosition);
            }
        }
    }
}


音乐播放器3.0(播放内存卡中的音频文件)

先要在内存卡里面通过cmd导入音频文件,再在代码里面读出来
键盘徽标键+R-->cmd-->adb shell-->出现一个$(代表普通用户)-->ls(查看内存所有文件及文件夹)-->cd data-->ls 

-->cd /mnt/sdcard(进内存卡)-->回车-->ls 

把音乐导到内存卡里面去(图片a)(pu 往出导 push往进导)
   1.adb push 音乐名.mp3 /mnt/sdcard/s1.mp3-->回车
   2.查看有没有导进去 cd/mnt/sdcard-->回车-->ls


AndroidManifest.xml

 <!--权限:读取内存卡中的音乐-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
MainActivity.java
package com.zking.android27_playmusic;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
    private SeekBar sb_main_bar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar);//获取进度条

        sb_main_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            //进度改变
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }
            //开始滑
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }
            //停止滑
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                  //获取当前进度条的位置
                  int currentPosition=seekBar.getProgress();
                  //跳转到某个位置进行播放
                  mediaPlayer.seekTo(currentPosition);
            }
        });
    }

    public void playOrPause(View view){
            ImageButton imageButton= (ImageButton) view;

            //实例化MediaPlayer
            if(mediaPlayer==null) {
                  //mediaPlayer = MediaPlayer.create(this, R.raw.s1);//从项目里面拿音乐
                  //点播放时拿到内存卡的路径(从内存卡中拿音乐)
                  if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                        String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();
                        mediaPlayer=new MediaPlayer();
                        //设置音频流的类型
                        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                        //设置音源(协议:file://)
                        try {
                            mediaPlayer.setDataSource(this, Uri.parse("file://"+sdPath+"/s1.mp3"));
                            mediaPlayer.prepare();//只有播放内存卡里面的需要异步准备(好比如需要缓冲一下)
                            //需要在清单文件中加权限
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        mediaPlayer.start();
                        //暂停图标
                        imageButton.setImageResource(android.R.drawable.ic_media_pause);
                        //获取音乐的播放时间
                        int time=mediaPlayer.getDuration();
                        //设置进度条的最大值 为  音乐的播放时间
                        sb_main_bar.setMax(time);
                        //让线程跑起来
                        new MyThread().start();
                  }
            }else if(mediaPlayer.isPlaying()){//下一次点击如果正在播放
                  mediaPlayer.pause();//暂停
                  //播放图标
                  imageButton.setImageResource(android.R.drawable.ic_media_play);
            }else{//第三次播放
                  mediaPlayer.start();//接着播放
                  //暂停图标
                  imageButton.setImageResource(android.R.drawable.ic_media_pause);
            }
    }

    //子线程 让进度条动起来
    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            while(sb_main_bar.getProgress()<sb_main_bar.getMax()){//当前的进度<最大值 就 一直播放
                //获取音乐当前的播放位置
                int currentPosition=mediaPlayer.getCurrentPosition();
                sb_main_bar.setProgress(currentPosition);
            }
        }
    }
}


音乐播放器4.0(播放网络音乐)

搭建网络环境




在浏览器中下载音乐到桌面


具体实现代码如下

AndroidManifest.xml

<!--网络音乐权限-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
MainActivity.java
package com.zking.android27_playmusic;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
    private SeekBar sb_main_bar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar);//获取进度条

        sb_main_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            //进度改变
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }
            //开始滑
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }
            //停止滑
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                  //获取当前进度条的位置
                  int currentPosition=seekBar.getProgress();
                  //跳转到某个位置进行播放
                  mediaPlayer.seekTo(currentPosition);
            }
        });
    }

    public void playOrPause(View view){
            final ImageButton imageButton= (ImageButton) view;

            //实例化MediaPlayer
            if(mediaPlayer==null) {
                  //mediaPlayer = MediaPlayer.create(this, R.raw.s1);//从项目里面拿音乐
                  //点播放时拿到内存卡的路径(从内存卡中拿音乐)
                  if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                        String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();
                        mediaPlayer=new MediaPlayer();
                        //设置音频流的类型
                        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                        //设置音源(协议:file://)
                        try {
                            //mediaPlayer.setDataSource(this, Uri.parse("file://"+sdPath+"/s1.mp3"));
                            mediaPlayer.setDataSource(this, Uri.parse("http://193.168.3.181:8080/s11.mp3"));
                            //mediaPlayer.prepare();
                            mediaPlayer.prepareAsync();
                            //需要在清单文件中加权限
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        //设置准备监听
                        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                              @Override
                              public void onPrepared(MediaPlayer mp) {
                                  mediaPlayer.start();
                                  //暂停图标
                                  imageButton.setImageResource(android.R.drawable.ic_media_pause);

                                  //获取音乐的播放时间
                                  int time=mediaPlayer.getDuration();

                                  //设置进度条的最大值 为  音乐的播放时间
                                  sb_main_bar.setMax(time);

                                  new MyThread().start();
                              }
                        });
                  }
            }else if(mediaPlayer.isPlaying()){//下一次点击如果正在播放
                  mediaPlayer.pause();//暂停
                  //播放图标
                  imageButton.setImageResource(android.R.drawable.ic_media_play);
            }else{//第三次播放
                  mediaPlayer.start();//接着播放
                  //暂停图标
                  imageButton.setImageResource(android.R.drawable.ic_media_pause);
            }
    }

    //子线程 让进度条动起来
    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            while(sb_main_bar.getProgress()<sb_main_bar.getMax()){//当前的进度<最大值 就 一直播放
                //获取音乐当前的播放位置
                int currentPosition=mediaPlayer.getCurrentPosition();
                sb_main_bar.setProgress(currentPosition);
            }
        }
    }

}

了解一下





Android---多媒体(音乐播放器) 阅读详情

相关推荐

多媒体播放器,音乐播放器,MFC

MFC做音乐播放器,需要使用到ActiveX控件(Windows Media Player),可以播放音视频,支持歌单添加,删除,保存操作,支持循环,顺序,随机播放。

Android Studio实现多媒体播放器,音乐视频一体化

这次的网络版音乐视频播放器是在前面讲到的音乐播放器项目(Android Studio如何实现音乐播放器)基础上,将音乐文件与项目文件独立开,放在服务器的文件夹里面进行访问,除此之外还添加了视频播放器功能。本次项目综合了Android几乎所有知识,可以让大家熟练掌握Android程序开发的基本技术,涉及Android 基础知识、UI界面、数据存储、四大组件、网络编程、高级编程、多媒体播放器、适配器配置等。大家熟练掌握可以对以后的Android开发有非常大的帮助。

振华OPPO的博客世界 3万+

多媒体播放器(音乐 视频 图片)

东软实习中 以小组合作做出来的 效果强大 是本人上传上一个版本的更新

多媒体音乐播放器(MediaPlayer)

我给大家分享一个我写的一个简单的音乐播放的功能 说起音乐播放器就会想到MediaPlayer这个类 首先音乐的播放来源有三种方式 1.在自己的应用中MediaPlayer.create(this, R.raw.roar);2.放在自己的sd卡中(内存卡) mediaPlayer.setDataSource(this, Uri.parse("file://mnt/s

overturn的博客 796

java实现音乐播放器

模拟实现一个多功能电子设备,它既能播放mp3歌曲,同时还能够借助播放器的界面来监测脉动。 1)有一个菜单条,上面有一个菜单,菜单里有“start”、“stop”和“quit”命令。 2)有一个输入框,旁边的文本为"Enter BPM:",可以在输入框内容输入特定的节拍。 3)有一个“set”按钮,可以改变每分钟的节拍数。 4)还有两个微调箭头按钮“<<”和“>>”,使用这两个按钮可以微调节拍的值。 注意,选择“start”开始产生节拍,选择“stop”停止产生节拍。在选择开始产生节拍时,stop都应该是无效的,但是节拍产生后,start应该是无效的。 2.该设备配有一个控制器,控制mp3播放,存储播放歌曲的数据和节拍状态,并包含播放mp3的逻辑。 3.该设备还可以监测脉动。 4.在播放MP3时,在界面2上调整节拍后,会调整mp3播放器歌曲的节拍,同时界面1上显示出当前歌曲的节拍状态。 5.在做监测脉动时,屏幕界面2上所有的设置按钮都是无效的,因为我们不能去设置脉动。

java 多媒体 音乐播放器

Java音乐播放器,可以添加文件夹中的文件,有暂停功能。支持mp3格式,适合初级学习的朋友。

HMI-53-【多媒体】音乐播放器 2

今天我们接着搞我们的音乐播放器,今天我把们昨天剩下的那些布局搞一搞,后面再实现细节,今天我们把下面的菜单和逻辑实现了,以及上次漏掉的右上角的子菜单按钮。

DreamLife&Yaothos 895

给麒麟KylinOS服务器加把锁:手把手配置符合等保要求的密码强度策略

本文详细介绍了如何在麒麟KylinOS服务器上配置符合等保要求的密码强度策略,包括pwquality.conf和login.defs的核心参数设置、等保合规的进阶配置技巧以及企业环境中的平衡艺术。通过实战案例和测试方法,帮助管理员构建坚固的密码防线,确保系统安全。

weixin_33749242的博客 419

WPF音乐播放器(一)

WPF音乐播放器 XAML源码: <Window x:Class="音乐.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xml...

-_^汪洸*的博客 1583

Allegro17.2 出gerber文件详细流程 - 干货

Allegro17.2 出gerber文件详细流程 - 干货

u010614434的博客 1万+

嵌入式工程师必看:BLDC电机驱动电路设计全流程(附MOS管选型指南)

本文为嵌入式工程师提供了BLDC电机驱动电路设计的全流程实战指南。文章深入解析了三相全桥逆变电路的核心原理,并重点阐述了功率MOSFET的选型关键参数,如Vds、Rds(on)和Qg。同时,详细介绍了栅极驱动设计、PCB布局布线要点及调试安全步骤,旨在帮助开发者构建稳定高效的BLDC驱动系统。

weixin_29194817的博客 589

Android多媒体(音乐播放器)

activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools

XHui_Lin的博客 624

redhawk-sc使用简介

数据完整性对结果的准确性有很大影响,所以一定要保证数据完整性,Redhawk-sc在跑完后,Report里有Data Integrity界面,在这个界面会看到设计数据和库文件的数据完整性,在相应的报告中会有没有覆盖到的数据情况,要对每一项仔细检查,保证输入数据没有问题。文件一般加密,用户唯一需要选择的是文件的corner。其中,cell lef除了常规的standard cell,还有如DTCD,BTSV和clamp等cell的lef,不可缺失,否则data integrity将不是100%。

weixin_48518726的博客 3140

安卓APP源码和报告——音乐播放器

课 程 设 计 报 告目 录1. 引言11.1 目的11.2 背景12. 需求分析13. 系统设计13.1总体设计13.2功能设计14. 系统开发24.1源程序清单24.2功能实现25. 系统测试25.1测试方法25.2测试实现25.3测试结果26. 结论与心得27. 参考文献3 1. 4.2功能实现import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sq

科大云炬 1834

Miniforge3部署教程,完美替代Anaconda3

大背景不介绍了,哎!直接上教程!

zzy_ucas的博客 1万+

SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2)

本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。

weixin_26905487的博客 391

第十一章:Android中的多媒体应用

播放音频及视频我们会用到MediaPlayer和JetPlayer类,录制音频及视频我们会用到MediaRecorder类。文件的来源可以是本地文件系统文件、存储在Android中的资源文件,还可以是通过网络的文件流。 Android对常用媒体格式提供了支持,支持的图片格式有JPEG、GIF、PNG、BMP,支持的音频格式有3GP、MP3、WAV,支持的视频格式有3GP、MP4等。  一、音频

LO/QI 1198

《民机适航入门指南:从法规学习到项目实践的全面解析》

适航(Airworthiness)是指航空器、其发动机、螺旋桨和其他部件在规定条件下,能够安全飞行并满足有关航空法规规定的条件。简而言之,适航代表了航空器在任何时候都能安全运营的状态。适航在民用航空领域尤为关键,因为飞机必须经过严格的适航认证才能投入商用。这些认证的目标是确保飞机能够在广泛的运行条件下保持飞行安全,从而保护乘客、机组和地面人员的生命财产安全。适航法规覆盖了飞机的整个生命周期,包括设计、制造、测试、运营、维护和报废。

qq_41854911的博客 992

Android多媒体分析(二)MediaStore

相信每个使用Android系统的人都会知道Android系统中带有一个图库应用程序或者一个音乐播放器吧。打开图库可以查看到当前终端里所有的图片文件,而音乐播放器可以看到当前终端里所有的MP3文件,而这个打开的过程并不会消耗太多的时间。如果是在打开的时候去扫描所有内存,所有SD卡的话,相信相应是不会这么迅速的。   后来通过观察终端的Log,发现每次开机时,会有几条tag为MediaScann

u011361576的专栏 678

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HTML004——多媒体

添加背景音乐(只适用于IE浏览器) 添加音乐播放器 FLV播放器 --> 此页面上的内容需要较新版本的 Adobe Flash Player。 -->

fabuler的专栏 372

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

27个优秀APP加载动画与进度条设计案例

调查显示人们总是希望看到进度条的,尤其是在各种数据化APP中。充分理解当前状态或进度,对用户来说至关重要。另外,在需要耐心等待的时候,进度条是极为强大的工具。活力四射、有趣且漂亮令人愉快的进度条,绝对会让我们短短数秒的等待时间兴致盎然。 而且,进度条是各种多媒体播放器的基本组成,提供了退后和前进的功能。让用户不只是跟随播放,更能控制它。进度状态的图形表达对于增加用户好感起着至关重要的

wenlyli的专栏 3824

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android 多媒体(播放应用内的音乐)

音乐播放器实现一是放在应用程序里面的,在后面的博客我会说到在手机内存和网络中的播放器,所以,有需要的话,可以去看看我后面的那些博客!由于思路比较清晰,代码量也不是很多而且挺简单的,所以在这里我就直接放代码了。 xml布局文件: [html] view plain copy xml version="1.0" encoding="utf-

JHandYY的博客 566
上一篇: 26.获取系统联系人ContentProvider
下一篇: 28.Android-多媒体(视频播放器-拍照-录像)
_北冥有鱼_
博客等级 码龄10年 41粉丝 59原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值