安卓中的音乐播放

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

熟悉了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;
    }
 
}
 
时间: 2024-10-07 20:18:06

安卓中的音乐播放的相关文章

安卓系统手机音乐播放器问题

我喜欢听歌,老歌.新歌.民歌.通俗歌都行,只要我认为好听就行了.除了在电脑上听歌外,还与时俱进的买了几个随身听和MP3,现在是手机和平板(Win8.1系统的),歌曲格式也由MP3升级为无损格式. 我现在有4条耳机,价格在120 - 568之间,分别是森海MX375,索尼XBA C10,爱科技K142HD和铁三角CKS77X,以前还有一条号称"女毒"的索尼E888,因时间太长(2004年儿子出差到日本花了7000多日元买的),去年终于寿终正寝了.对音乐发烧者来说,这些可能太低档了,价格没

如何写一个正经的Android音乐播放器 一

以前写过很多次音乐播放器,但是总有一些问题出现,例如: 1,音乐长时间播放问题(即便是放在service中去播放,依然会被杀死): 2,音乐的播放进度如何掌握?(如何利用mediaplayer.getCurrentPosition()来有效的通知界面变更进度?): 3,在我以往的经验中,音乐播放完毕下一曲时候,经常出现当前音乐播放还差几秒钟的时候就下一曲了的情况. 从网上找到教程中,通常都是一个播放器的demo,简单的直接把MediaPlayer放在了一个Activity中去操作,稍有良心的教程

安卓音乐播放器中歌词同步问题

音乐文件是.lrc格式的,以一首歌曲为例, [ti:回忆的沙漏][ar:邓紫棋][al:G.E.M.][by:][offset:0][00:02.50]回忆的沙漏 - G.E.M. 邓紫棋[00:04.62]词:庭竹[00:05.72]曲:G.E.M.[00:15.03]拼图一片片失落[00:18.56]像枫叶的冷漠[00:21.87]墙上的钟[00:23.79]默默数着寂寞[00:29.30]咖啡飘散过香味[00:33.06]剩苦涩陪着我[00:36.68]想念的心[00:39.44]埋葬我在

安卓音乐播放器

程序实现本地音乐文件的播放功能,显示播放歌曲的信息,显示本地歌词,从网络上获取歌词,摇一摇切歌,切换背景等功能! 1.要去实现播放音乐文件,因为程序关掉之后,音乐是不能停掉的,所以要在活动中去绑定服务,对音乐文件的操作都在服务中进行, 所以第一步新建工程之后将活动与新建的服务绑定,在这里给服务命名为MusicService, public class MusicService extends Service { private ArrayList<MyMusic>  data=new Arra

AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件

下面是ipad上的调试效果 下面是代码,代码中都有注释: #import <UIKit/UIKit.h>  #import <AVFoundation/AVFoundation.h>  #import <MediaPlayer/MediaPlayer.h>   @interface RootViewController : UIViewController <AVAudioPlayerDelegate> {     AVAudioPlayer *player

10.14_魅族手机音乐播放无故暂停,MetroUICss-tile中的字如何居中

(1)魅族手机,播放音乐,无故暂停.不管是自带的音乐播放程序,还是下载的其他音乐播放器都是如此.而且,手机上有个Google服务耗电量非常高,会经常弹出登陆Google账号的弹出项. (2)Metro UI CSS tile中的字如何居中,看官方是示例是给了一个图片!而且holder.js要在支持html5的浏览器下才能有效.我是否可以使用SVG呢?! (3)tile小例子: <!DOCTYPE html> <html> <head> <meta charset=

C# Winform 中如何实现音乐播放和视频播放

C#  Winform 中如何实现音乐播放和视频播放 namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Form2() { InitializeComponent(); SoundPlayer sp = new SoundPlayer("C:/Users/xingping.xu/Documents/Visual Studio 2010/Projects/ConsoleApplicatio

Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果

目前Android的实现是:有来电时,音乐声音直接停止,铃声直接直接使用设置的铃声音量进行铃声播放. Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果. 如果要实现这个效果,首先要搞清楚两大问题: 1.来电时的代码主要实现流程. 2.主流音乐播放器在播放过程中,如果有来电,到底在收到了什么事件后将音乐暂停了? 一:来电时的代码主要实现流程 我不是第一研究来电代码的人,网上已经有高手对这个流程剖析过,不是不完全符合我的要求,我参考过的比较有价值的是如下两个

AIDL在音乐播放器中的应用

一.AIDL简介 由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象.在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想访问的话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界.通过代码来实现这个数据传输过程是冗长,但是Android为开发者提供了AIDL工具来处理这项工作. AIDL (Android Interface Definition Language)是一种IDL语言,用于生成可