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;
        }
     
    }
     
     
  • 相关阅读:
    delphi提示:File not Found:DockForm.dcu的解决办法
    Delphi7 从资源文件中载入GDI+对象
    蛙蛙推荐:在c#使用IOCP(完成端口)的简单示例
    倡议:大家做一个.net开源的灾难管理系统
    蛙蛙推荐:c#使用winsock api实现同步Socket服务端
    蛙蛙推荐:用winsock和iocp api打造一个echo server
    讨论:零拷贝和环形队列缓存队列问题
    蛙蛙推荐:利用Excel进行销售量预测
    临时放段c++代码,关于IOCP的,让群里朋友看
    蛙蛙推荐:蛙蛙教你索引邮件
  • 原文地址:https://www.cnblogs.com/yangzhenyu/p/2177824.html
Copyright © 2011-2022 走看看