美文网首页
智能终端软件开发——音乐播放器

智能终端软件开发——音乐播放器

作者: itczt | 来源:发表于2019-05-22 22:59 被阅读0次

    1.创建程序

    创建一个名为MusicPlayer的应用程序,指定包名为cn.itcast.musicplayer,设计用户交互界面,具体代码如下:

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
       <EditText
           android:id="@+id/et_inputpath"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="Music\a.mp3"
           />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            android:orientation="horizontal"
            >
            <TextView
                android:id="@+id/tv_play"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:drawablePadding="3dp"
                android:drawableTop="@drawable/play"
                android:gravity="center"
                android:text="播放"
                />
            <TextView
                android:id="@+id/tv_pause"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:drawablePadding="3dp"
                android:drawableTop="@drawable/pause"
                android:gravity="center"
                android:text="暂停"
                />
        </LinearLayout>
    
    </LinearLayout>
    
    在上述代码中,添加一个EditText控件用于输入音频文件名称,添加一个LinearLayout布局,在该布局中放置了两个TextView控件用于实现播放、暂停的单击事件。TextView中的android:derawabletop属性用于设置文字上方的图片。
    

    2.创建服务类

    下面创建一个Service类,指定名称MusicService,该类用于实现音乐的播放和暂停功能,具体代码如下:

    package com.czt.musicplayer;
    
    import android.app.Service;
    import android.content.Intent;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.os.Binder;
    import android.os.IBinder;
    
    public class MusicService extends Service {
        private static final String TAG = "MusicService";
        public MediaPlayer mediaPlayer;
        class MyBinder extends Binder{
            //播放音乐
            public void play(String path) {
                try{
                    if (mediaPlayer == null){
                        //创建一个MediaPlayer播放器
                        mediaPlayer = new MediaPlayer();
                        //指定参数为音频文件
                        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                        //指定播放的路径
                        mediaPlayer.setDataSource(path);
                        //准备播放
                        mediaPlayer.prepare();
                       mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                           @Override
                           public void onPrepared(MediaPlayer mp) {
                               mediaPlayer.start();
                           }
                       });
                    }else {
                        int position = getCurrentProgress();
                        mediaPlayer.seekTo(position);
                        try {
                            mediaPlayer.prepare();
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                        mediaPlayer.start();
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            //暂停播放
            public void pause(){
                if (mediaPlayer != null && mediaPlayer.isPlaying()){
                    mediaPlayer.pause();//暂停播放
                }else if (mediaPlayer != null && (!mediaPlayer.isPlaying())){
                    mediaPlayer.start();
                }
            }
        }
        public void onCreate(){
            super.onCreate();
        }
        //获取当前速度
        public int getCurrentProgress(){
            if (mediaPlayer !=null & mediaPlayer.isPlaying()){
                return mediaPlayer.getCurrentPosition();
            }else if (mediaPlayer != null & (!mediaPlayer.isPlaying())){
                return mediaPlayer.getCurrentPosition();
            }
            return 0;
        }
        public void onDestroy() {
            if (mediaPlayer != null){
                mediaPlayer.stop();
                mediaPlayer.release();
                mediaPlayer = null;
            }
            super.onDestroy();
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            //第一步执行onBind方法
            return new MyBinder();
        }
    }
    
    

    在上述代码中,完成了音乐的播放、暂停功能。通过onBind()f方法将MyBinder对象返回给访问者,从而完成访问者和Service的通信,并实现了对音乐播放器的操作。
    上述代码中使用了MediaPlayer类实现播放音乐功能,接下来简单介绍一下MediaPlayer类中的常用的方法。

    • setAudioStreamType(): 指定音频文件的类型,必须在prepare()方法之前调用;
    • setDataSource(): 设置要播放的音频文件的位置,Uri路径;
    • prepare(): 准备播放,调用此方法会使MediaPlayer进入准备状态;
    • start(): 开始或继续播放音频;
    • pause(): 暂停播放音频;
    • seeKTo: 从指定的位置开始播放音频;
    • release():释放掉与MediaPlayer对象相关的资源;
    • isPlaying(): 判断当前MediaPlayer是否正在播放音频;
    • getCurrentPosition(): 获取当前播放音频文件的位置。

    编写界面交互代码

    接下来在MainActivity中实现播放、暂停按钮的单击事件,具体代码如下:

    MainActivity.java

    package com.czt.musicplayer;
    
    import android.content.ComponentName;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.Environment;
    import android.os.IBinder;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import java.io.File;
    
    public class MainActivity extends AppCompatActivity  implements
            View.OnClickListener {
    private EditText path;
    private Intent intent;
    private myConn conn;
    MusicService.MyBinder binder;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            path = (EditText) findViewById(R.id.et_inputpath);
            findViewById(R.id.tv_play).setOnClickListener(this);
            findViewById(R.id.tv_pause).setOnClickListener(this);
            conn = new myConn();
            intent = new Intent(this,MusicService.class);
            bindService(intent,conn,BIND_AUTO_CREATE);
        }
        private class myConn implements ServiceConnection {
            public void onServiceConnected(ComponentName name, IBinder service){
                binder = (MusicService.MyBinder)service;
            }
            public void onServiceDisconnected(ComponentName name){
            }
        }
    
        @Override
        public void onClick(View v) {
            String pathway = path.getText().toString().trim();
            File SDpath = Environment.getExternalStorageDirectory();
            File file = new File(SDpath,pathway);
            String path = file.getAbsolutePath();
            switch (v.getId()){
                case R.id.tv_play:
                    if (file.exists() && file.length() >0){
                        binder.play(path);
                    }else {
                        Toast.makeText(this,"找不到音乐文件",Toast.LENGTH_SHORT).show();
                    }
                    break;
                case R.id.tv_pause:
                    binder.pause();
                    break;
                default:
                    break;
    
            }
        }
    
        @Override
        protected void onDestroy() {
            unbindService(conn);
            super.onDestroy();
        }
    
    }
    
    

    在上述代码中,在onCreate()方法中绑定服务,并且实现播放和暂停按钮的监听事件。

    4.运行程序

    运行音乐播放器之前,首先将指定的音频文件导入到模拟器的mnt/sdcard/Muaic目录中。如图所示:


    导入音频文件

    运行音乐播放器程序,在音乐播放器程序中填写音频文件sdcard文件夹中的全部路径,如音频文件在sdcard文件夹中的Music文件夹中,需要填写音频路径为“Music.mp3”,运行结果如图所示


    运行结果

    相关文章

      网友评论

          本文标题:智能终端软件开发——音乐播放器

          本文链接:https://www.haomeiwen.com/subject/znipzqtx.html