当前位置: 首页 > news >正文

做旅游攻略的网站好可以免费发帖的网站

做旅游攻略的网站好,可以免费发帖的网站,品牌网站建设框架,焦作市网站建设使用MediaPlayer播放音频文件 MediaPlayer 概览 | Android 开发者 | Android Developers (google.cn) MediaPlayer | Android Developers (google.cn) 1. 应用需求 异步播放,利用服务进行后台播放;(暂时没有实现音频焦点转移的功能&#…

使用MediaPlayer播放音频文件

MediaPlayer 概览 | Android 开发者 | Android Developers (google.cn)

MediaPlayer | Android Developers (google.cn)

1. 应用需求

  1. 异步播放,利用服务进行后台播放;(暂时没有实现音频焦点转移的功能)
  2. 显示音频文件列表,选中不同的歌曲,播放不同的音频文件(未实现);
  3. 添加进度条,实现音频进度可调整。(未实现)

注意需要实现音频的焦点转移,不能和beatbox应用似的,快速点击时候会有很多个音频在同时响。

目前只实现了一个后台播放。

2. MediaPlayer

在这里插入图片描述

MediaPlayer 支持三种不同的媒体来源:

  1. 本地资源,(res/raw文件夹下的文件)
  2. 内部的 URI,比如可以通过 ContentResolver 来获取
  3. 外部的 URL(流) 对于Android所支持的的媒体格式列表,

除了第一种文件不需要prepare()这个操作,其余的媒体资源都需要进行prepare()。

注意一个点:

reset

public void reset ()

Resets the MediaPlayer to its uninitialized state. After calling this method, you will have to initialize it again by setting the data source and calling prepare().

reset()后需要重新的设置数据源和重新prepare()

常用 API 描述

getCurrentPosition( ):得到当前的播放位置
getDuration() :得到文件的时间
getVideoHeight() :得到视频高度
getVideoWidth() :得到视频宽度
isLooping():是否循环播放
isPlaying():是否正在播放
pause():暂停
prepare():准备(同步)
prepareAsync():准备(异步)
release():释放MediaPlayer对象
reset():重置MediaPlayer对象
seekTo(int msec):指定播放的位置(以毫秒为单位的时间)
setAudioStreamType(int streamtype):指定流媒体的类型
setDisplay(SurfaceHolder sh):设置用SurfaceHolder来显示多媒体
setLooping(boolean looping):设置是否循环播放
setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener): 网络流媒体的缓冲监听
setOnCompletionListener(MediaPlayer.OnCompletionListener listener): 网络流媒体播放结束监听
setOnErrorListener(MediaPlayer.OnErrorListener listener): 设置错误信息监听
setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener): 视频尺寸监听
setScreenOnWhilePlaying(boolean screenOn):设置是否使用SurfaceHolder显示
setVolume(float leftVolume, float rightVolume):设置音量
start():开始播放
stop():停止播放

3. 播放音频

(1)res/raw目录下的文件

播放作为本地原始资源(保存在应用的 res/raw/ 目录中)提供的音频:

MediaPlayer mediaPlayer =MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start();// no need to call prepare(); create() does that for you

“原始”资源是指系统不会尝试以任何特定方式解析的文件。不过,该资源的内容不应为原始音频。它应该是采用某种支持的格式且经过适当编码和格式化的媒体文件。

(2)内部 URI

更改MediaPlayerAudioService.java文件中的30行

这里的文件地址可以用adb shell来获取,进入到相关的文件夹下,pwd

mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
File file = new File("//sdcard/Music/fly.mp3");
mPlayer.setDataSource(getApplicationContext(), Uri.parse(file.getAbsolutePath()));
mPlayer.prepare(); // might take long! (for buffering, etc)

(3)外部网址(流式传输)

4. 利用服务后台播放音乐

(1)利用startService

(2)利用binderService

binderService要比startService好一些,我们可以在binder中去实现定制的功能方法,同时有binder可以将调用者和service连接起来。

MediaPlayerAudioService.java

public class MediaPlayerAudioService extends Service {private static final String TAG = "IntentService";private static final String EXTRA_AUDIO_RES_ID = "android.byd.audiovedio.audio_res_id";private MediaPlayer mPlayer = null;private boolean isRelease = true;   //判断是否MediaPlayer是否释放的标志private int mMusicResId;public MediaPlayerAudioService() {}public static Intent newIntent(Context context, int musicResId) {Intent intent = new Intent(context, MediaPlayerAudioService.class);intent.putExtra(EXTRA_AUDIO_RES_ID, musicResId);return intent;}//定义onBinder方法所返回的对象public class MyBinder extends Binder {// 设置歌曲ResIdpublic void setResId(int resId) {mMusicResId = resId;}// 播放public void play(){if (isRelease) {mPlayer = MediaPlayer.create(getApplicationContext(), mMusicResId);isRelease = false;}mPlayer.start();   //开始播放}// 暂停public void pause(){mPlayer.pause();     //暂停播放}// 停止public void stop(){mPlayer.reset();     //重置MediaPlayermPlayer.release();   //释放MediaPlayerisRelease = true;}}private MyBinder mBinder = new MyBinder();@Overridepublic IBinder onBind(Intent intent) {// TODO: Return the communication channel to the service.Log.i(TAG, "onBind方法被调用!");mMusicResId = intent.getIntExtra(EXTRA_AUDIO_RES_ID, 0);return mBinder;}@Overridepublic void onCreate() {Log.i(TAG, "onCreate方法被调用!");super.onCreate();}@Overridepublic boolean onUnbind(Intent intent) {Log.i(TAG, "onUnbind方法被调用!");return true;}@Overridepublic void onDestroy() {Log.i(TAG, "onDestroy方法被调用!");super.onDestroy();}@Overridepublic void onRebind(Intent intent) {Log.i(TAG, "onRebind方法被调用!");super.onRebind(intent);}
}

MediaPlayerAudioActivity.java

public class MediaPlayerAudioActivity extends AppCompatActivity implements View.OnClickListener{private Button mStartButton;private Button mPauseButton;private Button mStopButton;public static Intent newIntent(Context packageContext) {Intent intent = new Intent(packageContext, MediaPlayerAudioActivity.class);return intent;}//保持所启动的Service的IBinder对象,同时定义一个ServiceConnection对象private MediaPlayerAudioService.MyBinder mBinder;private ServiceConnection conn = new ServiceConnection() {//Activity与Service断开连接时回调该方法@Overridepublic void onServiceDisconnected(ComponentName name) {System.out.println("------Service DisConnected-------");}// Activity与Service连接成功时回调该方法@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {System.out.println("------Service Connected-------");mBinder = (MediaPlayerAudioService.MyBinder) service;}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_media_player_audio);mStartButton = (Button) findViewById(R.id.btn_media_player_audio_start);mPauseButton = (Button) findViewById(R.id.btn_media_player_audio_pause);mStopButton = (Button) findViewById(R.id.btn_media_player_audio_stop);Intent intentService = MediaPlayerAudioService.newIntent(this, R.raw.fly);// 绑定服务bindService(intentService, conn, Service.BIND_AUTO_CREATE);mStartButton.setOnClickListener(this);mPauseButton.setOnClickListener(this);mStopButton.setOnClickListener(this);}@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.btn_media_player_audio_start:mBinder.play();mStartButton.setEnabled(false);mPauseButton.setEnabled(true);mStopButton.setEnabled(true);break;case R.id.btn_media_player_audio_pause:mBinder.pause();mStartButton.setEnabled(true);mPauseButton.setEnabled(false);mStopButton.setEnabled(false);break;case R.id.btn_media_player_audio_stop:mBinder.stop();// stop() 之后如果想再次播放,就得再次prepare()mStartButton.setEnabled(true);mPauseButton.setEnabled(false);mStopButton.setEnabled(false);break;}}
}
http://www.hkea.cn/news/539684/

相关文章:

  • 织梦做企业网站教程网络营销推广方案论文
  • 微信如何添加小程序二十条优化措施全文
  • 网站制作费可以做业务宣传费河北百度推广电话
  • wordpress日主题破解网站排名优化软件有哪些
  • 做公众号app 网站 app济南网站设计
  • 单位网站 单位网页 区别吗福州seo顾问
  • 专业做网站制作的公司百度地图网页版进入
  • 买卖网站域名骗局百度推广登陆
  • 石家庄大型网站设计公司手机怎么建网站
  • 政府网站图解怎么做百度关键词排名靠前
  • 天津做网站印标东莞网络推广排名
  • 设计一个外贸网站需要多少钱沈阳网站推广优化
  • 洗化行业做网站福州百度seo排名
  • 西安app网站开发项目腾讯域名注册官网
  • 网站开发的技术指标如何做网站搜索引擎优化
  • 建网站的要求老铁外链工具
  • wordpress有广告郑州seo优化大师
  • 企业网站推广的实验内容企业宣传网站
  • 如何开发高端市场宁波seo快速优化公司
  • 常用设计资源网站爱网站
  • 企业品牌网站营销关于seo的行业岗位有哪些
  • 群晖怎样做网站惠州网络营销
  • 怎么做网站内部链接的优化品牌营销推广代运营
  • 婚纱照网站制作搜索引擎优化搜索优化
  • 网站建设吉金手指专业13中国营销网站
  • 做销售在哪些网站注册好百度产品
  • dw做汽车网站seo排名工具提升流量
  • 网络培训学校排名奉化seo页面优化外包
  • vps除了做网站还能做什么晨阳seo服务
  • seo网站建设优化什么意思网络营销与直播电商专业就业前景