文档章节

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

樂天
 樂天
发布于 2014/05/11 16:37
字数 643
阅读 1095
收藏 30

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()。

© 著作权归作者所有

共有 人打赏支持
樂天
粉丝 136
博文 674
码字总数 147858
作品 3
深圳
程序员
私信 提问
利用MEDIAPLAYER制作ANDROID播放器

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

迷途d书童
2012/04/26
1K
0
Android:MediaSession框架介绍

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

1641907557
2016/01/30
7.8K
2
新手求教activity跳转问题

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

karlnonfu
2012/05/27
405
1
简易AndroidMusicBox实现

app下载链接,欢迎给我的所谓的app找bug,谢谢指教!听朋友反映,问题还不少,有的手机根本无法打开app,有的出现歌曲列表就闪退,正在努力debug,见谅,浪费各位流量了! http://pan.baidu.c...

国之利刃2013
2017/02/10
0
0
android 服务中播放音乐问题

需要Android 中写一个音乐播放器 ,第一个遇到的问题是activity关闭后 音乐播放也停止了,服务中的代码如下, activity中就写了 请大神指点下是什么原因? 还有一个问题是 mediaPlayer是写在...

活在梦里
2016/08/16
162
0

没有更多内容

加载失败,请刷新页面

加载更多

防御CSRF攻击

跨站请求伪造(CSRF)是一种安全漏洞,攻击者利用受害者的 session 来通过受害者的浏览器发出请求。攻击者通过受害者的浏览器发送请求,并伪造成是受害者自己发出的请求。 建议你先熟悉CSRF,...

Landas
16分钟前
0
0
【双12首发】终于等来了!PhalApi-iView-admin 开源后台框架

PhalApi-iView-admin 开源后台框架 码云地址:https://gitee.com/dogstar/phalapi-iview-admin Github地址:https://github.com/phalapi/phalapi-iview-admin 主要采用的技术: PhalApi 开源......

暗夜在火星
16分钟前
0
0
JavaScript面试题大坑之隐式类型转换实例代码

1.1-隐式转换介绍 在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算 这种无需程序员手...

peakedness丶
18分钟前
0
0
示例vue 的keep-alive缓存功能的实现

本篇文章主要介绍了vue 的keep-alive缓存功能的实现,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 #Vue 实现组件信息的缓存 当...

前端攻城老湿
20分钟前
0
0
解析Vue.js中的computed工作原理

我们通过实现一个简单版的和Vue中computed具有相同功能的函数来了解computed是如何工作的。写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批...

前端攻城小牛
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部