MediaPlayer Android 体统的播放流媒体文件的工具类,项目需要播放音频,特此简单记录一下音频播放的方法调用
####1. MediaPlayer支持:AAC、AMR、FLAC、MP3、MIDI、OGG、PCM等格式
####2. MediaPlayer 方法调用 
MediaPlayer() ,MediaPlayer.create(mContext, rawRes) 初始化方法 注意:MediaPlayer.create() 方法内部调用了prepare 方法 所以直接start()就行 多次调用会异常
setDataSource() 设置资源 
setOnCompletionListener() 完成的监听
setOnErrorListener()播放异常的监听
setOnPreparedListener() 准备完成的监听
start() 开始播放
pause() 暂停
release() 销毁
package com.wu.material.util
import android.annotation.SuppressLint
import android.content.Context
import android.content.res.AssetFileDescriptor
import android.media.AudioManager
import android.media.MediaPlayer
import android.net.Uri
import android.os.Build
import androidx.annotation.RequiresApi
/**
* 音频播放
*/
@SuppressLint("StaticFieldLeak")
object MediaPlayerUtil {
private var mContext: Context? = null
var mPlayer: MediaPlayer? = null
private var isPause = false
private var isPlaying = false
fun isPlaying(): Boolean {
return isPlaying
}
fun initMedia(mContext:Context,rawRes: Int) {
mPlayer = MediaPlayer.create(mContext, rawRes)
mPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
}
@RequiresApi(Build.VERSION_CODES.N)
fun initMedia(mContext:Context, fad: AssetFileDescriptor) {
mPlayer = MediaPlayer()
mPlayer!!.setDataSource(fad)
}
fun initMedia(mContext:Context,path: String) {
mPlayer = MediaPlayer()
mPlayer!!.setDataSource(path)
}
fun initUriMedia(mContext:Context,uriPath: String) {
mPlayer = MediaPlayer()
mPlayer!!.setDataSource(mContext!!, Uri.parse(uriPath))
mPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
}
fun setMediaListener(listener: MediaPlayerListener) {
mPlayer!!.setOnCompletionListener {
isPlaying = false
listener.finish()
}
mPlayer!!.setOnErrorListener { mp, what, extra ->
isPlaying = false
listener.onErr(what)
false
}
mPlayer!!.setOnPreparedListener {
listener.prepare()
}
}
fun playMedia() {
if (mPlayer != null && !mPlayer!!.isPlaying) {
mPlayer!!.start()
}
}
fun prepare() {
if (mPlayer != null && !mPlayer!!.isPlaying) {
mPlayer!!.prepare()
}
}
fun prepareAsync() {
if (mPlayer != null && !mPlayer!!.isPlaying) {
mPlayer!!.prepareAsync()
}
}
fun pause() {
if (mPlayer != null && mPlayer!!.isPlaying) {
mPlayer!!.pause()
isPause = true
}
}
// 继续
fun resume() {
if (mPlayer != null && isPause) {
mPlayer!!.start()
isPause = false
}
}
fun release() {
if (mPlayer != null) {
try {
mPlayer!!.a's'()
} catch (e: Exception) {
}
mPlayer = null
}
isPlaying = false
}
}
注意:MediaPlayer.create() 内部已调用 mp.prepare() 
####1.引用raw 的资源播放音频
MediaPlayerUtil.initMedia(this,R.raw.audio)
MediaPlayerUtil.setMediaListener(object :MediaPlayerListener{
override fun onErr(messageCode: Int) {
}
override fun finish() {
}
override fun prepare() {
}
})
MediaPlayerUtil.playMedia()
####2.引用assets的资源播放音频
var fikkDes= assets.openFd("audio.mp3") as AssetFileDescriptor
MediaPlayerUtil.initMedia(this,fikkDes)
MediaPlayerUtil.setMediaListener(object :MediaPlayerListener{
override fun onErr(messageCode: Int) {
}
override fun finish() {
}
override fun prepare() {
MediaPlayerUtil.playMedia()
}
})
MediaPlayerUtil.prepareAsync()
####3.引用网络资源播放音频
var path="https://downsc.chinaz.net/Files/DownLoad/sound1/202103/s1024.mp3"
private fun playRawUri() {
MediaPlayerUtil.initMedia(this,path)
MediaPlayerUtil.setMediaListener(object :MediaPlayerListener{
override fun onErr(messageCode: Int) {
}
override fun finish() {
}
override fun prepare() {
MediaPlayerUtil.playMedia()
}
})
MediaPlayerUtil.prepareAsync()
}
如有帮助欢迎点赞, 源码地址
本文由博客一文多发平台 OpenWrite 发布!
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt