免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1368 | 回复: 0
打印 上一主题 下一主题

Android学习笔记(12)-开始做一个数独游戏[补充] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-18 11:08 |只看该作者 |倒序浏览
再补充一点吧,如果需要给游戏加上背景音乐,其实也是非常容易的事情。因为Android提供了一个 MediaPlayer类可以方便的播放音乐文件。
android.media.MediaPlayer类没有构造函数,一般是用它的静态方法create生成实例,简单地告诉它音乐文件的资源ID即可(支持mp3/wav/midi等)。
首先,我们得建立一个Service,就叫MediaService吧,它的代码如下:


public class MediaService extends Service implements MediaPlayer.OnErrorListener,MediaPlayer.OnCompletionListener,MediaPlayer.OnPreparedListener ...{

      

      ... ...   


    private MediaPlayer player;

   

    @Override


    protected void onDestroy() ...{

        // TODO Auto-generated method stub

        super.onDestroy();


        if(player!=null)...{

            player.stop();

            player.release();

        }

    }


    @Override


    protected void onStart(int startId, Bundle arguments) ...{

        // TODO Auto-generated method stub

        Log.d("Media","onStart");

            

        player=MediaPlayer.create(this.getApplication(),R.raw.tonhua);


        if(player!=null)...{

            player.setAudioStreamType(AudioSystem.STREAM_MUSIC);

            

            player.setOnCompletionListener(this);

            player.setOnPreparedListener(this);

            player.setOnErrorListener(this);

            

            player.prepareAsync();

        }

    }


    @Override


    public void onCompletion(MediaPlayer arg0) ...{

        // TODO Auto-generated method stub

        Log.d("Media","finished.");

    }


    @Override


    public void onPrepared(MediaPlayer arg0) ...{

        // TODO Auto-generated method stub

        Log.d("Media","prepared.");

        player.start();

    }

   

    @Override


    public void onError(MediaPlayer arg0,int what, int extra) ...{

               

        Log.d("Media","onError");

        player.stop();

    }

}

这个服务主要就是用一个MediaPlayer去播放资源中的tonghua(一首MP3音乐)。次序一般是先create出这个实例,然后 prepare一下(如果是文件直接prepare,如果是流则最好异步parepareAsync),接着就可以start了,同步可以直接 start,异步则必须放到onPrepared中再start。
在MainActivity中启动这个服务即可。

mediaServiceIntent= new Intent();

mediaServiceIntent.setClass(this, MediaService.class);

        

this.startService(mediaServiceIntent, new Bundle());
当前,在Activity停止时也别忘了将这个Service停掉,而在Service停止时关掉MediaPlayer。
在模拟器上试了,效果不是太好,声音有点断断续续,不知道是不是我的解码器的问题(Vista系统)。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/85805/showart_1421772.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP