Android 使用mediaplayer播放res/raw文件夹中的音乐的实例

Android 使用mediaplayer播放res/raw文件夹中的音乐的实例

(1)在res文件夹中新建一个文件夹重命名为raw,并且将要播放的音乐放到raw文件夹里面

(2)修改layout目录下的xml布局文件,添加3个按钮空间和一个文本控件,用于提示当前播放状态和 播放暂停 停止等功能。具体代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" > 

  <TextView
    android:id="@+id/hint"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="单击播放开始播放音乐" /> 

  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" > 

   <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="播放" /> 

  <Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="暂停" /> 

  <Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="停止" />
  </LinearLayout> 

</LinearLayout>

(3)打开MainActivity 在该类中,定义所需的成员变量,具体代码如下

private MediaPlayer mp;//mediaPlayer对象
private Button play,pause,stop;//播放 暂停/继续 停止 按钮
private TextView hint;//显示当前播放状态
private boolean isPause=false;//是否暂停 

(4)在onCreate()方法中,获取播放 暂停/继续 停止 按钮 提示当前状态的文本框,并为mediaplayer对象创建播放的对象,具体代码如下。

play=(Button) findViewById(R.id.button1);
pause=(Button) findViewById(R.id.button2);
stop=(Button) findViewById(R.id.button3);
hint=(TextView) findViewById(R.id.hint);
hint.setTextSize(20);
mp=MediaPlayer.create(MainActivity.this, R.raw.sound);//创建mediaplayer对象

(5)编写用于播放音乐的无返回值的play()方法。在该方法中首先调用mediaplayer对象的reset()方法重置mediaplayer对象,然后重新为其设置要播放的音频文件。最后调用start()方法开始播放音频

private void play(){
  try{
    mp.reset();
    mp=MediaPlayer.create(MainActivity.this, R.raw.sound);//重新设置要播放的音频
    mp.start();//开始播放
    hint.setText("正在播放音频...");
    play.setEnabled(false);
    pause.setEnabled(true);
    stop.setEnabled(true);
  }catch(Exception e){
    e.printStackTrace();//输出异常信息
  }
}

(6)为mediaplayer对象添加完成时间监听器,用于当音乐播放完毕后重新开始播放音乐

mp.setOnCompletionListener(new OnCompletionListener() { 

      @Override
      public void onCompletion(MediaPlayer arg0) {
        // TODO Auto-generated method stub
        play();//重新开始播放
      }
    });

(7)为播放按钮添加单击事件监听器

play.setOnClickListener(new OnClickListener() { 

    @Override
    public void onClick(View v) {
      // TODO Auto-generated method stub
      play();
      if(isPause){
        pause.setText("暂停");
        isPause=false;
      }
    }
  });

(8)为暂停按钮添加单击事件监听器

pause.setOnClickListener(new OnClickListener() { 

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        if(mp.isPlaying()&&!isPause){
          mp.pause();
          isPause=true;
          pause.setText("继续");
          hint.setText("暂停播放音频...");
          play.setEnabled(true);
        }else{
          mp.start();
          pause.setText("暂停");
          hint.setText("继续播放音频...");
          isPause=false;
          play.setEnabled(false);
        }
      }
    });

(9)为停止按钮添加单击事件监听器

stop.setOnClickListener(new OnClickListener() { 

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        mp.stop();
        hint.setText("停止播放音频...");
        pause.setEnabled(false);
        stop.setEnabled(false);
        play.setEnabled(true);
      }
    });

(10)一定要记得这个。重写Activity的onDestroy()方法,用于在当前Activity销毁时,停止正在播放的音频,并释放mediaplayer所占用的资源,否则你每打开一次就会播放一次,并且上次播放的不会停止 你可以试试的,我解释不清楚

protected void onDestroy() {
  // TODO Auto-generated method stub
  if(mp.isPlaying()){
    mp.stop();
  }
  mp.release();//释放资源
  super.onDestroy();
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android组件DrawerLayout仿网易新闻v4.4侧滑菜单

    概述 今天这篇博客将记录一些关于DrawerLayout的基本用法,我想关于DrawerLayout的用法也许有不少不够了解,这也是比较正常的事情,因为DrawerLayout作为Android组件是Google后来在android中添加的,在android.support.v4包下.那么,DrawerLayout是一个怎么的组件呢?我们知道,当我们使用Android上各类App的时候,是不是注意过App主页上通常有一个"侧滑菜单"?关于侧滑菜单的实现,我在前面博客里有一些介绍,想多些

  • Android中drawable使用Shape资源

    本文实例为大家分享了drawable使用Shape资源的具体内容,供大家参考,具体内容如下 1.画一条水平方向的虚线 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke andro

  • Android setButtonDrawable()的兼容问题解决办法

    Android  setButtonDrawable()的兼容问题解决办法 setButtonDrawable()的兼容问题 API16实现 /** * Set the background to a given Drawable, identified by its resource id. * * @param resid the resource id of the drawable to use as the background */ public void setButtonDraw

  • Android DrawableTextView图片文字居中显示实例

    在我们开发中,TextView设置Android:drawableLeft一定使用的非常多,但Drawable和Text同时居中显示可能不好控制,有没有好的办法解决呢? 小编的方案是通过自定义TextView实现. 实现的效果图: 注:第一行为原生TextView添加android:drawableLeft 第二行为自定义TextView实现的效果. 实现思路: 继承TextView,覆盖onDraw(Canvas canvas),在onDraw中先将canvas进行translate平移,再调

  • Android canvas drawBitmap方法详解及实例

     Android canvas drawBitmap方法详解及实例 之前自己在自定义view,用到canvas.drawBitmap(Bitmap, SrcRect, DesRect, Paint)的时候,对其中的第2和3个参数的含义含糊不清.看源码函数也没理解,然后看了一些其他的博客加上自己的理解,整理如下.首先,我们看一张图片,今天就要绘制这张图片. 然后将图片用红色的线条分成4个部分,如下: 我们自定义一个View,代码如下: public class PoterDuffLoadingVi

  • Android raw 目录下视频的缩略图的获取

     Android raw 目录下视频的缩略图的获取 以下代码用于获取 Android raw目录下视频文件的缩略图: /** * 获取 raw 下 指定视频文件的缩略图 * @param aVideoName * @return */ private Drawable getThumbnail(String aVideoName) { Drawable ret = null; int id = 0; try { id = R.raw.class.getDeclaredField(aVideoNa

  • Android 使用mediaplayer播放res/raw文件夹中的音乐的实例

    Android 使用mediaplayer播放res/raw文件夹中的音乐的实例 (1)在res文件夹中新建一个文件夹重命名为raw,并且将要播放的音乐放到raw文件夹里面 (2)修改layout目录下的xml布局文件,添加3个按钮空间和一个文本控件,用于提示当前播放状态和 播放暂停 停止等功能.具体代码如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layou

  • Android 在 res/layout 文件夹 下创建一个 子文件夹实例

    Android 资源文件夹 Layout 文件夹 Layout 文件是存放Android的布局文件的资源文件夹,但是如果你想要在里面创建子文件夹,你会发现xml文件报错. 如何在Layout文件夹下方创建Layout的子文件夹. 这边我们需要著一个一个点就是我们的Layout 文件夹是属于资源文件将,如果你直接创建文件夹Android 会无法识别你这个是资源文件夹,所以你需要让文件夹确定为资源文件夹. 如何设置文件夹为资源文件夹 我们将Android Studio 视图模式切换为Project

  • Android获取assets文件夹中的数据并写入SD卡示例

    本文示例主要实现了Android获取assets文件夹中的数据并将其写入到SD卡中,该程序实现的步骤主要为:首先读取assets文件夹中的数据库,再将其写入到SD存储卡中. 完整示例代码如下: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import android.content.Context; /*将assets文件

  • Android Studio 合并module到统一文件夹的方法

    在同一项目中,引用了多个module,长短不一的命名显得比较乱, 这里想把引入的module放到统一的目录,方便管理 在项目中新建一个文件夹 1.先正常导入module到项目中 2.把导入的module拖入到新建好的文件夹中 3.打开setting.gradle 在里面映射路径 完成! 下面看下android studio关于同名资源文件的合并 最近在开发过程中遇到了一个问题,在调整一个背景drawable文件的时候发现修改内容没有生效. 各种查找问题之后发现是由于另外一个模块内存在同名资源文件

  • Android获取SDcard目录及创建文件夹的方法

    获取sdcard目录 public static String getSDPath() { File sdDir = null; boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);// 判断sd卡是否存在 if (sdCardExist) { sdDir = Environment.getExternalStorageDirectory(

  • android中写一个内部类来选择文件夹中指定的图片类型实例说明

    复制代码 代码如下: /**本类是用来选择文件夹中是.jpg类型的图片*/ private class JpgFileFilter implements FilenameFilter{ @Override public boolean accept(File dir, String filename) { // TODO Auto-generated method stub return filename.endsWith(".jpg"); } }

  • Android 遍历文件夹中所有文件的实例代码

    可以获得文件夹中所有文件的路径及文件名. 代码很简单,直接上车,车上再解释: /** * 获取指定目录内所有文件路径 * @param dirPath 需要查询的文件目录 * @param _type 查询类型,比如mp3什么的 */ public static JSONArray getAllFiles(String dirPath, String _type) { File f = new File(dirPath); if (!f.exists()) {//判断路径是否存在 return

  • Python实现比较两个文件夹中代码变化的方法

    本文实例讲述了Python实现比较两个文件夹中代码变化的方法.分享给大家供大家参考.具体如下: 这里将修改代码后的目录与原始目录做对比,罗列出新增的代码文件,以及修改过的代码文件 # -*- coding: utf-8 -*- import os; folderA = "F:\\Projects\\FreeImageV3_14_1\\".lower(); folderB = u"E:\\Software\\图像解码库\\FreeImage3141\\FreeImage\\&q

  • 解决Django删除migrations文件夹中的文件后出现的异常问题

    migrate文件记录了每一次数据迁移的改变 解决方法:重建数据库 1.删除数据库 错误方法: python manage.py shell from app.models import *Product.objects.raw('drop database') 上面删除数据库的方法是错误的 正确方法: 如果是用默认的sqlite数据库:可以直接右键,将db.sqlite3删掉. 如果用的其他数据库,则进入数据库的控制台,将数据库删掉 2.删除migrations中的文件,只保留__init__

  • bat如何延时删除指定文件夹中的文件

    本文介绍的是bat如何延时删除指定文件夹中的文件,下面话不多说了,有需要的来一起看看下面的详细内容. 一.bat延时 xp程序中通过ping 127.0.0.1 -n 20 来实现延时操作,ping本地地址20行. win7中通过timeout 20 来实现延时20秒. 二.删除指定文件 del /q d:\11\*.* 删除d:\11文件夹下的所有文件,并且不需要提示删除. /P 删除每一个文件之前提示确认. /F 强制删除只读文件. /S 从所有子目录删除指定文件. /Q 安静模式.删除全局

随机推荐