博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android-本地音播放
阅读量:3936 次
发布时间:2019-05-23

本文共 3342 字,大约阅读时间需要 11 分钟。

android-本地音播放,加载自己的本地音乐!在线音乐学习中。。。。。

package com.example.service_play;

import android.annotation.SuppressLint;

import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

public class MainActivity extends AppCompatActivity {

private MyConnection conn;private MusicService.MyBinder musicControl;private Button playBtn;private SeekBar seekBar;private static final int UPDATE_PROGRESS = 0;//使用handler定时更新进度条@SuppressLint(value = "HandlerLeak")private Handler handler = new Handler() {    @Override    public void handleMessage(Message msg) {        switch (msg.what) {            case UPDATE_PROGRESS:                updateProgress();                break;        }    }};@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    playBtn = (Button) findViewById(R.id.play);    seekBar = (SeekBar) findViewById(R.id.sb);    Intent intent3 = new Intent(this, MusicService.class);    conn = new MyConnection();    //使用混合的方法开启服务,    startService(intent3);    bindService(intent3, (ServiceConnection) conn, BIND_AUTO_CREATE);    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {        @Override        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {            //进度条改变            if (fromUser){                musicControl.seekTo(progress);            }        }        @Override        public void onStartTrackingTouch(SeekBar seekBar) {            //开始触摸进度条        }        @Override        public void onStopTrackingTouch(SeekBar seekBar) {            //停止触摸进度条        }    });}private class MyConnection implements ServiceConnection {    //服务启动完成后会进入到这个方法    @Override    public void onServiceConnected(ComponentName name, IBinder service) {        //获得service中的MyBinder        musicControl = (MusicService.MyBinder) service;        //更新按钮的文字        updatePlayText();        //设置进度条的最大值        seekBar.setMax(musicControl.getDuration());        //设置进度条的进度        seekBar.setProgress(musicControl.getCurrenPostion());    }    @Override    public void onServiceDisconnected(ComponentName name) {    }}@Overrideprotected void onResume() {    super.onResume();    //进入到界面后开始更新进度条    if (musicControl != null){        handler.sendEmptyMessage(UPDATE_PROGRESS);    }}@Overrideprotected void onDestroy() {    super.onDestroy();    //退出应用后与service解除绑定    unbindService(conn);}@Overrideprotected void onStop() {    super.onStop();    //停止更新进度条的进度    handler.removeCallbacksAndMessages(null);}//更新进度条private void updateProgress() {    int currenPostion = musicControl.getCurrenPostion();    seekBar.setProgress(currenPostion);    //使用Handler每500毫秒更新一次进度条    handler.sendEmptyMessageDelayed(UPDATE_PROGRESS, 500);}//更新按钮的文字public void updatePlayText() {    if (musicControl.isPlaying()) {        playBtn.setText("暂停");        handler.sendEmptyMessage(UPDATE_PROGRESS);    } else {        playBtn.setText("播放");    }}//调用MyBinder中的play()方法public void play(View view) {    musicControl.play();    updatePlayText();}

}

转载地址:http://jkegn.baihongyu.com/

你可能感兴趣的文章
ActiveMQ学习(四)——应用程序接口
查看>>
ActiveMQ(五)_伪集群和主从高可用使用
查看>>
ActiveMQ(六)_多集群的负载均衡
查看>>
ActiveMQ(七)_集群负载配置
查看>>
JAVA多线程之线程间的通信方式
查看>>
java中Thread类方法介绍
查看>>
深入剖析ConcurrentHashMap(1)
查看>>
深入剖析ConcurrentHashMap(2)
查看>>
ConcurrentHashMap详解以及get方法保持同步的解释
查看>>
Java中的Copy-On-Write容器
查看>>
redis与DB数据同步问题
查看>>
Redis-低成本高可用方案设计Redis Sentinel
查看>>
redis部署及其高可用方案:主从+sentinel,安装步骤
查看>>
计算字符串中字符的相连字符的最大长度
查看>>
解决Spring AOP 事务 配置 失效原因--业务类里抛出的异常不满足事务拦截器里定义的异常
查看>>
springAOP事物管理不生效原因总结
查看>>
Spring AOP的实现原理
查看>>
zookeeper的功能以及工作原理
查看>>
3个线程每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次
查看>>
如何在高并发分布式系统中生成全局唯一Id
查看>>