android p官方铃声,Android 铃声播放
之前做了关于视频通话的应用,有一块功能是铃声的播放,遇到了一些坑。
这里封装了一个工具类,代码如下:
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.util.Log;
import java.util.HashMap;
public class MediaSoundUtil {
private static final int KEY_RING = 1;
private static final int KEY_REJECT = 2;
private static final String TAG = MediaSoundUtil.class.getSimpleName();
private static volatile MediaSoundUtil sSoundPoolUtil;
private final Context mContext;
private final SoundPool mSoundPool;
private final HashMap mSoundMap;
private int mCurrentId;
//声音资源加载完成的标识位
private boolean mHasLoaded;
private MediaSoundUtil(Context context) {
mContext = context.getApplicationContext();
mSoundPool = new SoundPool(2, AudioManager.STREAM_VOICE_CALL,0);
mSoundMap = new HashMap<>();
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
Log.i(TAG,"onLoadComplete "+sampleId+"staus "+status);
mHasLoaded = true;
}
});
mSoundMap.put(KEY_RING,mSoundPool.load(mContext, R.raw.ring,1));
mSoundMap.put(KEY_REJECT,mSoundPool.load(mContext,R.raw.reject,1));
Log.i(TAG,"MediaSoundUtil init map = "+mSoundMap);
}
public static MediaSoundUtil getInstance(Context context) {
if (sSoundPoolUtil == null) {
synchronized (MediaSoundUtil.class) {
if (sSoundPoolUtil == null) {
sSoundPoolUtil = new MediaSoundUtil(context);
}
}
}
return sSoundPoolUtil;
}
public void playRingSound() {
stopPlay();
Log.i(TAG, "playRingSound " + mCurrentId+",hasload "+mHasLoaded);
if (!mHasLoaded) {
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
if (sampleId == mSoundMap.get(KEY_RING)) {
playSoundId(mSoundMap.get(KEY_RING), true);
}
Log.i(TAG, "playRingSound onLoadComplete " + sampleId + "staus " + status);
mHasLoaded = true;
}
});
} else {
playSoundId(mSoundMap.get(KEY_RING), true);
}
}
public void playRejectSound(){
stopPlay();
Log.i(TAG,"playRejectSound "+mCurrentId+",hasload "+mHasLoaded);
if(!mHasLoaded){
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
if (sampleId == mSoundMap.get(KEY_REJECT)) {
playSoundId(mSoundMap.get(KEY_REJECT), false);
}
Log.i(TAG, "playRejectSound onLoadComplete " + sampleId + "staus " + status);
mHasLoaded = true;
}
});
}else{
playSoundId(mSoundMap.get(KEY_REJECT),false);
}
}
public void stopPlay() {
Log.i(TAG,"stopPlay "+mCurrentId);
if (mCurrentId != 0) {
mSoundPool.stop(mCurrentId);
}
}
private int playSoundId(int sampleId,boolean isLoop) {
mCurrentId = mSoundPool.play(sampleId, 1f, 1f, 1, isLoop ? -1 : 0, 1);
Log.i(TAG,"playSoundId = "+mCurrentId);
return mCurrentId;
}
}
android p官方铃声,Android 铃声播放相关推荐
- android mvvm官方demo,Android MVVM实战Demo完全解析
最新 [重大更新说明] 感谢各位读者的阅读,这篇文章由于年代久远,存在一些错误的观点,再次向大家道歉,也做一个技术上的解释说明. 受限于当时的技术水平和网络论调,在那个时代,网上绝大多数人 都认为加了 ...
- android studio 官方虚拟机,Android Studio安装虚拟机步骤
1. 新建 或者 2. 按图中的步骤,选择一款设备,建议选择分辨率小的,不占内存 3. 按图 4. 按图 5. 点击finish后,选择之前下载的虚拟机,点next 6. 虚拟机重命名 7. 到这里, ...
- android pie 官方壁纸,Android 10.0 内置壁纸提取,带你提前进入Q时代
原标题:Android 10.0 内置壁纸提取,带你提前进入Q时代 3月14日早晨谷歌推出了期待已久的Android Q的首个测试版本,这是Android系统推出以来的第十个大版本.在这个手机行业经过 ...
- Android开发音效增强中铃声播放Ringtone及声音池调度SoundPool的讲解及实战(超详细 附源码)
需要源码请点赞关注收藏后评论区留下QQ~~~ 一.铃声播放 虽然媒体播放器MediaPlayer既可用来播放视频,也可以用来播放音频,但是在具体的使用场合,MediaPlayer存在某些播音方面的不足 ...
- Android5.0自定义闹钟,Android自定义View 实现闹钟唤起播放闹钟铃声功能
先上图看一下闹钟唤期页面的效果 实现的功能: 1:转动的图片根据天气情况更换 2:转动时间可以设置,转动结束,闹铃声音就结束 3:光圈颜色渐变效果 直接上代码啦: package com.yuekon ...
- android java 怎么更换默认铃声,Android如何通过长按按钮将声音设置为铃声
如何长按按钮将声音设置为铃声? 目前它只适用于sound4但不适用于sound5 包com.test.soundboard; import java.io.File; import java.io.F ...
- Android应用--简、美音乐播放器原型放送(作者:小巫)
Android应用--简.美音乐播放器原型放送 2013年7月5日简.美音乐播放器开发 前言:小巫的简.美音乐播放器从5月7号开始开发,之前以为时间很充足,也没有估量整个软件的需求,如果简单实现基本的 ...
- android静音模式,android静音模式下仍可以播放媒体声音以及调节其大小。。。。...
不多说,先上图,先看一张我开发板的截图 ... 首先我先解释一下: 由于我的开发板硬件没有调节声音的按键,因而只能在图中所示 处调节,但是在静音之后,那个声音调节又不可点击,所以我们要在静音模式下使 ...
- android 自定义推流器,Android直播实现 Android端推流、播放
最近想实现一个Android直播,但是对于这方面的资料都比较零碎,一开始是打算用ffmpeg来实现编码推流,在搜集资料期间,找到了几个强大的开源库,直接避免了jni的代码,集成后只用少量的java代码 ...
最新文章
- 转贴一篇很不错的有关ASP.NET Session的分析文章
- 5G 与边缘计算的发展现状(2021 年 6 月)
- 第二次讲课内容(函数和快速幂)
- 串灯控制盒去掉怎么接_单双向可控硅好坏怎么判断
- 论如何入门地使用vscode
- 滴水穿石--mysql添加授权用户命令
- 辐流式重力浓缩池计算_注册考试重点!平流式、竖流式、辐流式、斜板式4大沉淀池构型...
- #动态规划 LeetCode 120 三角形最小路径和
- JQuery中Ajax传json格式中文至后台乱码
- 将Linkedin连结到outlook中
- Web 应用程序渗透测试清单
- 杰理之低延时无线麦功能支持以下两种组合配置【篇】
- Linux查询IP失败
- 数学建模竞赛论文写作规范
- 基于php047园林植物检索系统网站
- 回顾2021,展望2022,静Yu的万粉成长之路
- Learned-Mixin +H(LMH)
- html什么是插件,什么是jquery插件?
- 常见的百度蜘蛛IP 日志分析
- 群晖域名解析出现错误?别慌,排查原因有步骤
热门文章
- JavaScript使用技巧(2)
- java jui 正则表达式_正则表达式-Gorilla City-51CTO博客
- Javascript第五章删除、克隆、插入、替换方法源码第九课
- js node 打包mac应用_node app 打包工具pkg的具体使用
- 鸿蒙系统非手机用,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- idea怎么给方法快速添加注释_生完孩子胸部下垂怎么办?来看快速矫正的方法
- 2016级算法第五次上机-C.Bamboo和Coco
- ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
- iOS 上的相机捕捉 swift
- 【每日一linux命令4】常用参数: