Android 多媒体播放API简单实例

本文调用android的媒体播放器实现一些音乐播放操作

项目布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".MainActivity" >

 <EditText
  android:id="@+id/et_path"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:hint="请输入音乐文件的路径" />

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

  <Button
   android:id="@+id/bt_play"
   android:layout_width="0dip"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:text="播放" />

  <Button
   android:id="@+id/bt_pause"
   android:layout_width="0dip"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:text="暂停" />

  <Button
   android:id="@+id/bt_replay"
   android:layout_width="0dip"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:text="重播" />

  <Button
   android:id="@+id/bt_stop"
   android:layout_width="0dip"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:text="停止" />
 </LinearLayout>

</LinearLayout>

可以查看本地sdk中的文件查看相关api

file:///……/sdk/docs/guide/topics/media/mediaplayer.html

相关逻辑部分代码如下:

package com.wuyudong.mp3player;

import java.io.File;
import java.io.IOException;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

 private EditText et_path;
 private Button bt_play, bt_replay, bt_pause, bt_stop;

 private MediaPlayer mediaPlayer;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  et_path = (EditText) findViewById(R.id.et_path);
  bt_play = (Button) findViewById(R.id.bt_play);
  bt_replay = (Button) findViewById(R.id.bt_replay);
  bt_pause = (Button) findViewById(R.id.bt_pause);
  bt_stop = (Button) findViewById(R.id.bt_stop);

  bt_pause.setOnClickListener(this);
  bt_play.setOnClickListener(this);
  bt_replay.setOnClickListener(this);
  bt_stop.setOnClickListener(this);

 }

 @Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.bt_play:
   play();
   break;
  case R.id.bt_replay:
   replay();
   break;
  case R.id.bt_stop:
   stop();
   break;
  case R.id.bt_pause:
   pause();
   break;
  default:
   break;
  }
 }

 /**
  * 暂停音乐
  */
 private void pause() {
  if ("继续".equals(bt_pause.getText().toString().trim())) {
   mediaPlayer.start();
   bt_pause.setText("暂停");
   return;
  }
  if (mediaPlayer != null && mediaPlayer.isPlaying()) {
   mediaPlayer.pause();
   bt_pause.setText("继续");
   return;
  }
 }

 /**
  * 重新播放
  */
 private void replay() {
  if (mediaPlayer != null && mediaPlayer.isPlaying()) {
   mediaPlayer.seekTo(0);
   return;
  }
  play();
 }

 /**
  * 停止播放音乐
  */
 private void stop() {
  if (mediaPlayer != null && mediaPlayer.isPlaying()) {
   mediaPlayer.stop();
   mediaPlayer.release(); // 记得释放资源
   mediaPlayer = null;
   bt_play.setEnabled(true);
  }
 }

 /**
  * 播放音乐
  */
 private void play() {
  String path = et_path.getText().toString().trim();
  File file = new File(path);
  if (file.exists() && file.length() > 0) {
   try {
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.setDataSource(path);
    mediaPlayer.prepare(); // might take long! (for buffering, etc)
    mediaPlayer.start();
    mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
     @Override
     public void onCompletion(MediaPlayer mp) {
      bt_play.setEnabled(true);
     }
    } );

    bt_play.setEnabled(false);
   } catch (Exception e) {
    Toast.makeText(this, "播放失败", 0).show();
    e.printStackTrace();
   }
  } else {
   Toast.makeText(this, "文件不存在", 0).show();
  }

 }

}

在执行代码之前先上传一份音频文件到sdcard

最后运行项目实现的效果如下:

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

(0)

相关推荐

  • Android的多媒体管理库Glide的基本使用示例

    Glide 是一个android平台上的快速和高效的开源的多媒体资源管理库, 提供 多媒体文件的压缩,内存和磁盘缓存, 资源池的接口. Glide 支持获取,解压展示视频, 图像和GIFs,  Glide有一个可弹性的api可以让开发者自定义网络栈技术, 默认使用HttpUrlConnection , 你可以替换为  Google's Volley或者 OkHttp Glide 开始的目的是提供一个快速和平滑展示图片列表, 但是Glide对你需要拉取, resize 和展示远程的图片这些场景都是

  • Android实现多媒体录音笔

    记事本涉及到的仅仅是对string 的存储,而且在读取上并不存在什么难点,直接用textview显示便可以了.需要做的主要是使用SQLite对数据进行一个整理. 而录音笔需要考虑的就相对较多了:比如录音时中断,录音时用户点击播放按钮:未录音,用户点击停止按钮;在录音或者播放时关闭activity:listview的item中需要为button设置不同的点击效果等等. 为了便于新手学习,在此还是罗列一下涉及的主要知识点: 1.Baseadapter 2.JAVA的file 3.MediaRecor

  • Android实现多媒体之播放音乐

    闲来无聊,最近了解了一下多媒体的一些初步知识. 音频播放主要设计到MediaPlayer这个类,播放音频的路径可以来源于三个地方. 1.应用内的音频 public class MediaPlayActivity extends AppCompatActivity { private SeekBar seekBar; private MediaPlayer mediaPlayer; @Override protected void onCreate(Bundle savedInstanceStat

  • Android编程实现使用SoundPool播放音乐的方法

    本文实例讲述了Android编程实现使用SoundPool播放音乐的方法.分享给大家供大家参考,具体如下: 如果应用程序要播放密集.短促的音效,这时还用MediaPlayer就显得不合适了.MediaPlayer存在如下缺点: 1.资源占用率较高,延迟时间较长 2.不支持多个音频同时播放 此时我们可以用SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,例如它可以开始就加载20个音效,以后在程序中按音效的ID进行播放 SoundPool主要用于播放一些较短的声音

  • Android多媒体之画画板开发案例分享

    先看看效果: 其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了. 核心代码 : public class MainActivity extends Activity implements OnClickListener,OnSeekBarChangeListener { private View red_view,green_view,blue_view; //控制画笔颜色的三块区域 private SeekBar se

  • Android中扫描多媒体文件操作详解

    这篇文章从系统源代码分析,讲述如何将程序创建的多媒体文件加入系统的媒体库,如何从媒体库删除,以及大多数程序开发者经常遇到的无法添加到媒体库的问题等.本人将通过对源代码的分析,一一解释这些问题. Android中的多媒体文件扫描机制 Android提供了一个很棒的程序来处理将多媒体文件加入的媒体库中.这个程序就是MediaProvider,现在我们简单看以下这个程序.首先看一下它的Receiver 复制代码 代码如下: <receiver android:name="MediaScanner

  • Android多媒体之VideoView视频播放器

    本文实例为大家分享了视频播放器的两种方式,供大家参考,具体内容如下 1).SurfaceView 在布局文件中 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/too

  • Android开发中听筒无法播放音乐的解决方法

    本文实例讲述了Android开发中听筒无法播放音乐的解决方法.分享给大家供大家参考,具体如下: 这个问题让我蛋疼了,既然百度也木有资料. 耗时的主要原因是因为权限不足时,而没有终止程序,只用了一小行日志提醒,没有看到 用听筒播放很简单 AudioManager.setMode(AudioManager.MODE_IN_CALL) //设定为通话中即可 还是这一句代码的事,不过记得要加上权限 Android.permission.MODIFY_AUDIO_SETTINGS 不然会像我一样蛋疼半天

  • Android 多媒体播放API简单实例

    本文调用android的媒体播放器实现一些音乐播放操作 项目布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="matc

  • Android 自定义ContentProvider简单实例

    Android 自定义ContentProvider简单实例 Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下. 要使用ContentProvider来操作数据,必须要有保存数据的场所.可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库. 1,创建一个数据库帮助类,归根结底都是它在操作数据库.代码如下: package com.njue; import android.content.Context; import

  • Android 登录处理简单实例(源码下载)

    Android 登录处理简单实例 今天整理一下之前在项目中写的关于某些界面需要登录判断处理.这里整理了一个简易的 Demo 模拟一下 登录情况 和 未登录情况 下的界面跳转处理, 效果如图: 以上分别模拟了,未登录和已登录 情况下的 界面跳转和当前界面事件处理.接下来我们来看一下实现方式. 先从核心代码开始看: public class GoLoginUtil { public static final String CLASSNAME = "className"; public st

  • Android 单例模式 Singleton 简单实例设计模式解析

    单例模式 Singleton 简单实例设计模式解析 前言 今天我来全面总结一下Android开发中最常用的设计模式 - 单例模式. 关于设计模式的介绍,可以看下我之前写的:1分钟全面了解"设计模式" 目录 1. 引入 1.1 解决的是什么问题 之前说过,设计模式 = 某类特定问题的解决方案,那么单例模式是解决什么问题的解决方案呢? 含义:单例 =一个实例: 解决的问题:降低对象之间的耦合度 解决方法:单例模式,即实现一个类只有一个实例化对象,并提供一个全局访问点 1.2 实例引入 接下

  • Android手势操作简单实例讲解

    上一篇介绍的onTouch提供的事件还是相对较简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦,因为我们要根据用户触摸的轨迹去判断是什么手势.幸好Android SDK给我们提供了GestureDetector类,通过这个类我们可以识别很多的手势,主要是通过他的onTouchEvent(event)方法完成了不同手势的识别. GestureDetector这个类对外提供了两个接口和一个外部类:  •接口:OnGestureListener,OnDoubleTapListener  •外部类

  • Android 中API之Drawable资源详解及简单实例

    Android 中API之Drawable资源 1.最常用的StateListDrawable 说StateListDrawable,很多Android猿可能感到不太熟悉,不过如果说selector选择器,肯定都会恍然大悟,不错,这两个东西就是同一个~~ 它的用途之广,每个app必用,下面就写一个demo,来简要说一下用法. 比如一个登陆界面,它的输入框在获取焦点时需要更改背景,登陆按钮在输入框中有内容时,则更改背景颜色,这时候用selector选择器,那就方便多了,效果如下: EditText

  • Android 获取传感器列表整理及简单实例

    Android 获取传感器列表整理及简单实例 Android 4.4 (API等级19)支持以下传感器: TYPE_ACCELEROMETER 加速度传感器,单位是m/s2,测量应用于设备X.Y.Z轴上的加速度 传感器类型值(Sensor Type):1 (0x00000001) TYPE_AMBIENT_TEMPERATURE 温度传感器,单位是℃ 传感器类型值(Sensor Type): 13 (0x0000000d) TYPE_GAME_ROTATION_VECTOR 游戏动作传感器,不收

  • Android Kotlin的使用及简单实例

    Android Kotlin的使用及简单实例 写在前面的话,作为一个不熬夜的人,一觉醒来发现Kotlin成为了Android的官方语言,可谓是大喜过望.为了趁热打铁,我决定提前三天放出原定本周日Release的文章.希望能及时让大家了解一下Kotlin. 相信很多开发人员,尤其是Android开发者都会或多或少听说过Kotlin,当然如果没有听过或者不熟悉也没有关系.因为本篇文章以及博客后期的内容会涉及到很多关于Kotlin的知识分享. 在写这篇文章前的一个多月,Flipboard中国的Andr

  • ASP.NET中Web API的简单实例

    一.Web API的路由 1.在Visual Studio中新建MVC4项目,在App_Start目录下有一个WebApiConfig.cs文件,这个文件中就是相应的Web API的路由配置了. 2.Web API 框架默认是基于 Restful 架构模式的,与ASP.NET MVC 有区别的是,它会根据 Http 请求的 HttpMethod(Get.Post.Put.Delete)来在Controller 中查找 Action,规则是:Action 名中是否以Get.Post 开头?Acti

  • Android 实现圆角图片的简单实例

    Android 实现圆角图片的简单实例 实现效果图: 本来想在网上找个圆角的例子看一看,不尽人意啊,基本都是官方的Demo的那张原理图,稍后会贴出.于是自己自定义了个View,实现图片的圆角以及圆形效果.效果图: Android 圆角图片的实现形式,包括用第三方.也有系统的.比如makeramen:roundedimageview,系统的cardview , glide .fresco . compile 'com.android.support:appcompat-v7:24.0.0' com

随机推荐