原文地址:
https://developer.android.com/guide/topics/media/mediaplayer.html#viacontentresolver

语音播放

因为实习工作相关的缘故,最近在学习android语音播放的内容。

MediaPlayer

音频播放

MediaPlayer可以播放本地或者网络的音频,流程如下:

Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();

注意,mediaPlayer的prepare最好不要在主线程中使用,以免发生卡顿。如果要在主线程中用,应该使用prepareAsync,并设置回调接口。
音频播放完,记得要释放资源:

mediaPlayer.release();
mediaPlayer = null;

唤醒锁 Wake Locks

当手机休眠的时候,可能会停止诸如WiFi,CPU的一些模块。如果这个时候你的程序仍要在后台运行播放音乐,就需要放置一些功能诸如WiFi休眠。

Wake Lock 的作用就是在手机休眠时,通知手机你的程序仍然在使用某些模块,不要试图去关闭它们。

当初始化时,调用 mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); 可以保持CPU不被关闭。然而,这里仅仅保证了CPU的运行。如果播放的是流媒体音乐,需要使用wifi,那么还要获取wifi lock。

WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE)).createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");wifiLock.acquire();

当停止播放时,可以释放wifi lock。


Audio Focus

安卓是多应用的系统,后台可能有多个程序在同时运行。假如你在听音乐,这个时候突然打进来电话。如果音乐播放没有停止的话,那么你的和别人打电话的时候就会自带BGM,这种体验多数时候并不是让人那么愉快的。
为了解决这个问题,自android 2.2起,引入了Audio Focus用于让每个应用协调谁来使用扬声器播放。当某个应用获得了audio focus,那么它可以自由的使用扬声器。同时需要实现focus change接口,当其它应用获取audio focus时回调,及时的停止音乐的播放。
当然了,这并不是一种强制的机制,哪怕你失去了audio focus,依旧可以播放音乐。没有什么可以阻止你,但多半用户会关掉你。

获取audio focus 的代码如下:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int result = audioManager.requestAudioFocus( AudioManager.OnAudioFocusChangeListener, AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN);if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {// could not get audio focus.
}

其中AudioFocusChangeListener如下:

public void onAudioFocusChange(int focusChange) {switch (focusChange) {case AudioManager.AUDIOFOCUS_GAIN:// 可以继续播放if (mMediaPlayer == null) initMediaPlayer();else if (!mMediaPlayer.isPlaying()) mMediaPlayer.start();mMediaPlayer.setVolume(1.0f, 1.0f);break;case AudioManager.AUDIOFOCUS_LOSS:// 失去Audio Focus,应该停止播放并释放资源。if (mMediaPlayer.isPlaying()) mMediaPlayer.stop();mMediaPlayer.release();mMediaPlayer = null;break;case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:// 暂时失去,可能一会还会获得,可以停止播放但是不需要释放资源if (mMediaPlayer.isPlaying()) mMediaPlayer.pause();break;case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:// 失去Focus,但是可以以比较小的声音继续播放。if (mMediaPlayer.isPlaying()) mMediaPlayer.setVolume(0.1f, 0.1f);break;}
}

处理AUDIO_BECOMING_NOISY

当用户拔出耳机的时候,很多程序会选择暂停播放,这个是通过响应AUDIO_BECOMING_NOISY 的intent来实现的。
方法很简单,在你的程序中注册广播:

<receiver android:name=".MusicIntentReceiver"><intent-filter><action android:name="android.media.AUDIO_BECOMING_NOISY" /></intent-filter>
</receiver>
public class MusicIntentReceiver extends android.content.BroadcastReceiver {@Overridepublic void onReceive(Context ctx, Intent intent) {if (intent.getAction().equals(android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {// signal your service to stop playback// (via an Intent, for instance)}}
}

Android 语音播放Media Player相关推荐

  1. android 语音播放

    android 语音播放 MediaPlayer可以播放本地或者网络的音频,流程如下: Uri myUri = ....; // initialize Uri here MediaPlayer med ...

  2. android 语音播放工具,Android简易的仿微信聊天的语音播放控件

    说到Android音频播放,可谓108式,方案众多,这里有一篇总结Android几种播放音频的方式的文章,传送门.本文旨在熟悉MediaPlayer的使用,遂此控件封装采用MediaPlayer实现. ...

  3. android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类

    本文实例讲述了Android开发之MediaPlayer多媒体(音频,视频)播放工具类.分享给大家供大家参考,具体如下: package com.android.imooc.chat; import ...

  4. android语音播放工具(播放的同时异步存储)

    AudioTools 用于音频播放,播放网络或本地音频,一级缓存,存储到sd卡. 用法 初始化 IMAudioManager.instance().init(this); 使用 播放: /* audi ...

  5. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  6. android 播放器 wav 无法播放,对于Android媒体播放器mp3与wav(For android media player mp3 vs. wav)...

    对于Android媒体播放器mp3与wav(For android media player mp3 vs. wav) 我想知道在Android媒体播放器上加载和播放小wav是否比较快的小文件更快. ...

  7. 树莓派全语音控制媒体播放器(Fully Speech-Controlled Media Player)

    树莓派全语音控制媒体播放器(Fully Speech-Controlled Media Player) 主要特点: *全程无外设操作,可以在无鼠标键盘显示器等外设的情况下(Headless),完全通过 ...

  8. C# Winform使用Windows Media Player播放多媒体整理

    一.简单使用示例步骤 1.添加Windows Media Player 组件当前是系统的 Com组件 工具箱>右键"选择项">选择Com组件 2.控件拖拽到桌面,使用 ...

  9. 把你的Windows Media Player 打造成全能的播放器

    ------WMP 插件大搜罗 在Windows中自带一个媒体播放器Windows Media Player 我们都把它简称为WMP, 但WMP给人一种功能很弱的感觉,因为似乎它只能播放几种微软支持的 ...

最新文章

  1. Spark分析之Standalone运行过程分析
  2. PopupMenu消失(Dismiss)抓住
  3. What is 测试金字塔?
  4. 如何使用html如何安装,node.js – 如何使用全球安装的grunt-html?
  5. mac 升级到mavericks 安装php扩展现问题
  6. 机器学习系列(5)_从白富美相亲看特征预处理与选择(上)
  7. 注册机是如何获取序列号的?
  8. 网络流之dinic算法
  9. 2022年我应该怎么学习SAP?上篇
  10. 2022年第一季度的十个Web3项目
  11. 微机原理七种寻址方式
  12. 怎样开始学做自媒体?怎么起步?
  13. 龙门阵179期实录:技术专场之Android安全现状
  14. 4个技巧,Linux 下让工作效率翻倍!
  15. java读取docx_java使用poi读取doc和docx文件
  16. 【Qualcomm高通音频】如何使用QXDM、QCAT音频数据抓取
  17. 设置了店铺的旺旺分组,但是对应的旺旺分组灯不亮
  18. Square新增顾客忠诚度培养和收费凭条打印功能
  19. 阿里云服务器可以干嘛?十大用途使用场景集锦
  20. jQuery在线选座,jQuery选座系统

热门文章

  1. 2020-02-24 RK3288 Android7.1 5.1 增加AP6256 WI-FI Bluetooth调试记录
  2. 了解transparent,用transparent透明实现箭头绘制
  3. 细粒度视觉分析综述TPAMI2021
  4. 时间序列分析--手算时间序列
  5. 大家看看这个vmp壳如何下手脱壳?
  6. 吃掉棉花糖就等于吃掉未来
  7. What is WPK (PowerShell Kit) ?
  8. 多地雾霾空气污染严重
  9. visio中公式太小_针织布的价格计算公式你学会了吗?
  10. NOI题库刷题日志 (贪心篇题解)