文档章节

浅入浅出Android(005):使用MediaPlayer制作简单的音乐播放器,播放网络音乐

樂天
 樂天
发布于 2014/05/11 16:37
字数 643
阅读 1079
收藏 30
点赞 0
评论 0

MediaPlayer类支持MP3、3GP等音乐格式。使用该类可以制作一个简单的音乐播放器。下面的示例展示了如何播放网络中的一首歌曲,为了方面,这个歌曲服务器可以在自己的机器上搭建。笔者使用的是android4。

1、创建项目

不作赘述。

2、修改AndroidManifest.xml,添加INTERNET权限


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.HelloWorld"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="14"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="MyActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

3、修改布局文件layout\main.xml:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="这是一个音乐播放器"
            />
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="暂停"
            android:id="@+id/button_pause"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="播放"
            android:id="@+id/button_play"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="重新播放"
            android:id="@+id/button_replay"/>

</LinearLayout>
这里使用了LinearLayout布局,三个按钮的作用如其属性android:text所言。效果图如下:


4、主要Java代码:

package com.example.HelloWorld;

import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;

public class MyActivity extends Activity {

    private MediaPlayer mp;
    private String url = "http://example.com/songs/test/love-story.mp3";

    /**
     * Called when the activity is first created.
     */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Button playButton = (Button) findViewById(R.id.button_play);
        final Button replayButton = (Button) findViewById(R.id.button_replay);
        final Button pauseButton = (Button) findViewById(R.id.button_pause);

        mp = MediaPlayer.create(this, Uri.parse(this.url));

        playButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mp.start();
            }
        });
        pauseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mp.isPlaying()) {
                    mp.pause();
                } else {
                    Toast.makeText(MyActivity.this, "您还没播放呢", Toast.LENGTH_SHORT).show();
                }
            }
        });
        replayButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mp.reset();
                try {
                    mp.setDataSource(MyActivity.this, Uri.parse(url));
                    mp.prepare();
                    mp.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });

    }

    @Override
    protected void onDestroy() {
        if (mp.isPlaying()) {
            mp.stop();
        }
        mp.release();
        super.onDestroy();
    }
}





其中,
mp = MediaPlayer.create(this, Uri.parse(this.url));



创建 MediaPlayer对象并装载了网络上的一个音频,当然也可以指定为手机上存储的一个音频。

点击“播放”按钮时会调用 start()方法开始播放音乐。

点击“暂停“按钮时,先检查有没有在播放,若播放了在使用pause()暂停播放,否则提示”您还没播放呢“。

而点击”重新播放“按钮时先依次使用reset()和setDataSource()方法重置要播放的音乐。在start()之前需要prepare()。即在使用setDataSource()方法装载音频后必须使用prepare()方法,这才算是真正的装载。

另外在重写的onDestroy()方法中,检查了音乐是否在播放,播放的话就暂停音乐,并release()。

© 著作权归作者所有

共有 人打赏支持
樂天
粉丝 133
博文 669
码字总数 147271
作品 3
深圳
程序员
利用MEDIAPLAYER制作ANDROID播放器

ndroid可以播放手机内存中的音乐和存储卡上的音乐,播放声音主要是利用android.media.MediaPlayer类播放各种声音。下面是利用这个类完成的一个简陋的播放器: 点击开始能够播放声音,停止可以...

迷途d书童 ⋅ 2012/04/26 ⋅ 0

Android音频焦点与声音重叠

音视频播放在手机日常使用中非常频繁,当我们听着音乐刷着微博时,看到有趣的视频点击开始播放,音乐自动暂停,退出视频时音乐又自动恢复了播放(如果没有自动恢复的话,比如QQ音乐就会提示是...

haoyuan6786 ⋅ 06/07 ⋅ 0

新手求教activity跳转问题

新手刚入门android,想写个音乐播放器,碰到了一些问题,求教各位大神: Activity A :使用ListView输出音乐列表 package local.hk.hkSongPlayer; import android.app.Activity; import and...

karlnonfu ⋅ 2012/05/27 ⋅ 1

android开发中音频的使用

当进行android开发或游戏开发时,常常会涉及背景音乐的播放,以及短音效的使用 1.当涉及到背景音乐等长音乐播放时通常使用MediaPlayer类进行播放操作 MediaPlayer类常用方法: 1.public sta...

qq_38555940 ⋅ 05/28 ⋅ 0

Android:MediaSession框架介绍

很多同学,在学习安卓的时候,可能会完成一个音乐播放器的项目,因为音乐播放器项目会贯穿安卓的四大组件。在项目中,大家一定会在服务中使用MediaPlayer去播放音乐,但是界面如何控制服务进...

1641907557 ⋅ 2016/01/30 ⋅ 2

在Service中播放音乐

一。基本知识 (1)如果是播放 res/raw 文件中的音乐 ,则很简单 MediaPlayer mp = MediaPlayer.create(context, R.raw.soundfile1);mp.start(); (2)如果指定音乐文件夹的位子 进行播放,则...

chuiyuan ⋅ 2014/05/24 ⋅ 0

android 服务中播放音乐问题

需要Android 中写一个音乐播放器 ,第一个遇到的问题是activity关闭后 音乐播放也停止了,服务中的代码如下, @Override public void onCreate() { super.onCreate(); player=new MediaPlaye...

活在梦里 ⋅ 2016/08/16 ⋅ 0

Android 之 AIDL 和远程 Service 调用

文章转载:http://android.yaohuiji.com/archives/728 本讲的内容,理解起来很难,也许你看了很多资料也看不明白,但是用起来缺简单的要命。所以我们干脆拿一个音乐播放器中进度条的实例来说...

无鸯 ⋅ 2011/09/21 ⋅ 1

小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载三(通过实例来体验生命周

4.1.2 通过实例来亲身体验Activity的生命周期 上一小节介绍了Activity生命周期中的各个过程,本小节将以一个简单的实例来使读者亲身体验到Activity生命周期中的各个事件。 在Eclipse中新建一...

woiwoi ⋅ 2014/10/29 ⋅ 2

安卓开发,实现简单音乐播放器

Android平台多媒体框架核心使用的是OpenCORE多媒体框架,在安卓系统中所有涉及音频视频的录制。解码。播放都是通过它来实现的。Android系统音频视频以及流媒体类型数据的播放有MediaPlayer类...

15192761251 ⋅ 2015/11/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 22分钟前 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 46分钟前 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部