zoukankan      html  css  js  c++  java
  • Android中的音乐播放

          在Android平台下,要实现声音的播放是十分容易实现的,只要生成一个MediaPlayer对象,并调用它的相关方法,就能改变对声音播放进行控制。MediaPlayer对象有一下各种状态:

    mediaplayer_state_diagram

         熟悉了MediaPlayer对象的各种状态后以及转换条件,就能很好的控制媒体播放。

     

       例如:播放res/raw文件夹中的歌曲十分简单,只需写如下代码:

    MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
    mp.start();
     
       也可以指定音乐文件的位置来进行播放,例如,在sdcard根目录下有有一首歌曲:test.mp3。则可以这样播放:
            MediaPlayer mp = new MediaPlayer();
            String song = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test.mp3";
            try {
                mp.setDataSource(song);
                mp.prepare();
                mp.start();
            } catch (Exception e) {
                e.printStackTrace();
            }

          建议在播放音乐的时候把MediaPlayer放在Service中,因为如果放在Activity中会使得界面特别卡。而且音乐不能放到后台里播放,一旦退出Activity,音乐就会暂停播放。

          可以在Activity中布局相关的界面,例如按钮等。然后通过这个Activitiy来启动这个Service。要通过UI与Service交互,可以通过Intent对象传递消息。更复杂一些,要实现Service向Activity发送消息,并利用这些消息来更新UI,这可以用广播机制,例如告诉Activity是否正在播放,播放进度,当前播放歌曲条目等信息。

     

     例如以下实例代码:

      /*Activity中*/

     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            btnPlay = (Button)findViewById(R.id.btnPlay);
            btnPause = (Button)findViewById(R.id.btnPause);
            btnPlay.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this,SoundService.class);
                    intent.putExtra("playing", true);
                    startService(intent);
                }
            });
            
            btnPause.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this,SoundService.class);
                    intent.putExtra("playing", false);
                    startService(intent);
                }
            });
        }
    }

    播放音乐的Service代码:

    package com.yzy.sound;
     
    import android.app.Service;
    import android.content.Intent;
    import android.media.MediaPlayer;
    import android.os.IBinder;
     
    public class SoundService extends Service {
        private MediaPlayer mp;
     
        @Override
        public void onCreate() {
            super.onCreate();
            mp = MediaPlayer.create(this, R.raw.test);
        }
     
        @Override
        public void onDestroy() {
            super.onDestroy();
            mp.release();
            stopSelf();
        }
     
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            boolean playing = intent.getBooleanExtra("playing", false);
            if (playing) {
                mp.start();
            } else {
                mp.pause();
            }
            return super.onStartCommand(intent, flags, startId);
        }
     
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
     
    }
     
     
  • 相关阅读:
    CodeForces Gym 100935G Board Game DFS
    CodeForces 493D Vasya and Chess 简单博弈
    CodeForces Gym 100935D Enormous Carpet 快速幂取模
    CodeForces Gym 100935E Pairs
    CodeForces Gym 100935C OCR (水
    CodeForces Gym 100935B Weird Cryptography
    HDU-敌兵布阵
    HDU-Minimum Inversion Number(最小逆序数)
    七月馒头
    非常可乐
  • 原文地址:https://www.cnblogs.com/yangzhenyu/p/2177824.html
Copyright © 2011-2022 走看看