Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条(未待解决完问题)...
效果:
问题:可拖动进度条随进度条移动时,会致使音乐卡顿(待解决)
xml
<?xml version="1.0" encoding="utf-8"?> <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:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.chenshuai.myapplication.ActivityMusic"android:orientation="vertical"><ProgressBarandroid:layout_width="match_parent"android:layout_height="wrap_content"style="@android:style/Widget.ProgressBar.Horizontal"android:id="@+id/pb"/><SeekBarandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/sbr" /><TextViewandroid:layout_width="match_parent"android:layout_height="40sp"android:text="播放状态"android:textSize="20sp"android:gravity="center_horizontal"android:id="@+id/tv_1"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="播放"android:onClick="play_onclick"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="暂停"android:onClick="pause_onclick"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="停止"android:onClick="stop_onclick"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="退出"android:onClick="exit_onclick"/></LinearLayout></LinearLayout>
Service
package com.example.chenshuai.myapplication;import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.Binder; import android.os.IBinder;public class MyServiceMusic extends Service {public MyServiceMusic() {}public class Mybind extends Binder{//获取歌曲长度public int getMusicDuration(){int rtn = 0;if (mediaPlayer != null){rtn = mediaPlayer.getDuration();}return rtn;}//获取当前播放进度public int getMusicCurrentPosition(){int rtn = 0;if (mediaPlayer != null){rtn = mediaPlayer.getCurrentPosition();}return rtn;} public void seekTo(int position){if (mediaPlayer != null){mediaPlayer.seekTo(position);}}}@Overridepublic IBinder onBind(Intent intent) {// TODO: Return the communication channel to the service.//throw new UnsupportedOperationException("Not yet implemented");return new Mybind();}private MediaPlayer mediaPlayer;@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {//获取意图传递的信息String action = intent.getStringExtra("action");switch (action){case "play":if (mediaPlayer == null){mediaPlayer = MediaPlayer.create(this,R.raw.onceagain);}mediaPlayer.start();break;case "stop":if (mediaPlayer !=null){mediaPlayer.stop();mediaPlayer.reset();mediaPlayer.release();mediaPlayer = null;}break;case "pause":if (mediaPlayer !=null && mediaPlayer.isPlaying()){mediaPlayer.pause();}break;}return super.onStartCommand(intent, flags, startId);} }
java
package com.example.chenshuai.myapplication;import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ProgressBar; import android.widget.SeekBar; import android.widget.TextView;public class ActivityMusicservice extends AppCompatActivity {TextView tv_1;ProgressBar pb;SeekBar sbr;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_activity_music);tv_1 = (TextView)findViewById(R.id.tv_1);tv_1.setText("播放状态11:停止播放。。。");pb = (ProgressBar)findViewById(R.id.pb);sbr = (SeekBar)findViewById(R.id.sbr);}ServiceConnection serviceConnection;MyServiceMusic.Mybind mybind;public void play_onclick(View view){Intent intent = new Intent(this,MyServiceMusic.class);intent.putExtra("action","play");startService(intent);tv_1.setText("播放状态11:正在播放。。。");if (serviceConnection == null) {serviceConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mybind = (MyServiceMusic.Mybind) service;//设置进度条的最大长度int max = mybind.getMusicDuration();pb.setMax(max);sbr.setMax(max);sbr.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {mybind.seekTo(progress);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});//连接之后启动子线程设置当前进度new Thread(){public void run(){//改变当前进度条的值//设置当前进度while (true) {pb.setProgress(mybind.getMusicCurrentPosition());// sbr.setProgress(mybind.getMusicCurrentPosition());try {Thread.sleep(100);} catch (Exception e) {e.printStackTrace();}}}}.start();}@Overridepublic void onServiceDisconnected(ComponentName name) {}};//以绑定方式连接服务 bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);}}public void stop_onclick(View view){Intent intent = new Intent(this,MyServiceMusic.class);intent.putExtra("action","stop");startService(intent);tv_1.setText("播放状态11:停止播放。。。");}public void pause_onclick(View view){Intent intent = new Intent(this, MyServiceMusic.class);intent.putExtra("action","pause");startService(intent);tv_1.setText("播放状态11:暂停播放。。。");}public void exit_onclick(View view){stop_onclick(view);finish();} }
manifest.xml
<serviceandroid:name=".MyServiceMusic"android:enabled="true"android:exported="true" />
转载于:https://www.cnblogs.com/Chenshuai7/p/5429695.html
Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条(未待解决完问题)...相关推荐
- 音乐播放器的实现(五)—— 音量的加减和静音
音乐播放器的实现(五)-- 音量的加减和静音 传送门: 音乐播放器的实现(一)-- Audio Listener和Audio Source面板的介绍 音乐播放器的实现(二)-- UI面板的制作 音乐播 ...
- Android FFmpeg视频播放器三 音频封装格式解码播放
Android FFmpeg视频播放器一解封装 Android Android FFmpeg视频播放器二 视频封装格式解码播放 视频解封装之后就会得到音频流和视频流,解封状得到的数据是AVPackag ...
- Android 12.0 系统多个播放器app时,设置默认播放器
目录 1.概述 2.系统多个播放器app时,设置默认播放器的核心类
- 仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)
代码下载: http://download.csdn.net/detail/qq316293804/6409417 昨天的教程里写着预计MFC播放器会隔得久一点,但是今晚仔细看了下VLC的常用代码,发 ...
- html5 mp3播放器源码,HTML5自定义mp3播放器源码
audio对象 src兼容.ogg .wav .mp3 width autoplay loop muted静音 播放play() var myAudio = new Audio(); myAudio. ...
- 自定义音频播放器_创建自定义HTML5音频播放器
自定义音频播放器 在本教程中,我将向您介绍HTML5音频,并向您展示如何创建自己的播放器. 如果您想走捷径,请查看Envato市场上可用的现成的HTML5音频播放器 . 它使您可以从各种来源创建播放列 ...
- 带倍速音频播放器_带有播放列表HTML5音频播放器
带倍速音频播放器 HTML5 Audio player with playlist HTML5 audio player. Many of you faced with the task of cre ...
- [微信音频播放器] html5 audio 制作的微信播放器
weixinAudio.js 一个简单的微信样式播放器 播放器DOM及CSS是微信里内置的音频播放器的样式,重新创建了控制层js,方便在在公众号,APP等场景使用. 例子 demo 地址 github ...
- 自定义制作音频播放器_使用HTML5制作音频播放器,第3部分:微数据和皮肤
自定义制作音频播放器 In the first two articles of this series I introduced the concept and code of a customize ...
- JWPlayer Flash播放器如何实现视频分段载入播放从而节省带宽?
近期由于一个项目的需要,对Flash版本的播放器JWPlayer做了一些改进以支持一些功能,这里把中间用到的一些思路和做法记录下. 首先一个功能是:客户的很多flv视频都是完整的一个大视频,希望JWP ...
最新文章
- rest-framework 视图
- python红色_python把红玫瑰变成蓝色女巫,将,红色,转化,为,蓝色妖姬
- 我的Java教程,不断整理,反复学习,记录着那些年大学奋斗的青春
- 下pg负载均衡_SAE 场景下,应用流量的负载均衡及路由策略配置实践
- 「日常训练」 Genghis Khan the Conqueror(HDU-4126)
- 历史上的今天:阿帕网退役;Quintus 收购 Mustang;同步电流磁芯存储器获得专利...
- Hadoop启动脚本概览
- cmd 登录oracle
- 烟台大学举办首届ACM程序设计大赛
- 微波天线及各种天线概念解析
- c# spire.xls 设置文字为微软雅黑_微软自带de白板应用,超好用
- TiDB分布式数据库培训实战教程(分布式集群架构、分布式大数据平台)
- 高通开发-烧写及异常启动分析
- java在360运行不了_电脑360安全卫士打不开如何解决_360安全卫士无法打开的处理方法...
- vue聊天功能模块(五)pre标签使得消息表情换行
- 明清时期江右商的宗族教育——江西流坑村的历史人类学考察
- 微软测试管理框架(Microsoft Test Manager)
- 云开发平台开源应用中心一次体验
- webservice wsdl 转java对象
- Android调试工具ADB
热门文章
- Oracle Sys和system用户区别
- GPS模块数据放入谷歌地图显示,不准
- OCP考点实战演练02-日常维护篇
- iredmail开源邮件系统部署
- free C# Ebook (Amazing amount of ebooks available)
- 计算机硬盘是通用的吗,通用账务系统安装到计算机硬盘前需要进行的准备工作有()。A.清理硬盘B.校准计算机系统时间C.重设C - 作业在线问答...
- android 7.0 截图,Android,_7.0系统拍照后,使用系统截图功能,截图保存时崩溃如何解决,Android - phpStudy...
- 二叉树 --5.1.3 Binary Tree Zigzag Level Order Traversal --图解
- Java 8 新日期时间 API ( 下 ) – 时区日期时间
- android 缩放组件,Android控件之ZoomControls缩放控件