android本地音乐播放(二)

本文详细介绍了如何在Android平台上开发一个本地音乐播放器。主要涉及MainActivity的代码,包括ListView、音乐播放控制按钮、SeekBar以及相关事件监听的实现。同时,文章还提到了MusicAdapter、MusicPlayerApplication、LocalMusicDao等关键组件的作用和实现,展示了如何加载本地音乐数据并进行播放控制。
摘要由CSDN通过智能技术生成

MainActivity 代码

package cn.tedu.music_player_2.activity;

import java.util.List;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.TextView;
import cn.tedu.music_player_2.R;
import cn.tedu.music_player_2.adapter.MusicAdapter;
import cn.tedu.music_player_2.app.MusicPlayerApplication;
import cn.tedu.music_player_2.entity.Music;
import cn.tedu.music_player_2.service.PlayMusicService;
import cn.tedu.music_player_2.util.CommonUtils;
import cn.tedu.music_player_2.util.IMusicPlayer;

/**
* MainActivity
*
* @author chengheng
* @version 2.0
*/
public class MainActivity extends Activity implements View.OnClickListener,

OnItemClickListener, OnSeekBarChangeListener {
/**
* ListView:歌曲列表
*/
private ListView lvMusics;
/**
* ImageButton:播放或暂停
*/
private ImageButton ibPlayOrPause;
/**
* ImageButton:播放上一首
*/
private ImageButton ibPrevious;
/**
* ImageButton:播放下一首
*/
private ImageButton ibNext;
/**
* TextView:显示当前播放的歌曲的名称
*/
private TextView tvMusicTitle;
/**
* SeekBar:歌曲的播放进度
*/
private SeekBar sbMusicProgress;
/**
* TextView:歌曲当前播放到的时间
*/
private TextView tvMusicCurrentPosition;
/**
* TextView:当前播放的歌曲的时长
*/
private TextView tvMusicDuration;
/**
* 歌曲数据的List集合
*/
private List musics;
/**
* 歌曲列表的Adapter
*/
private MusicAdapter musicAdapter;
/**
* Application
*/
private MusicPlayerApplication app;
/**
* ServiceConnection:Activity与Service建立的连接
*/
private InnerServiceConnection conn;
/**
* 当Activity与Service连接后,调用Service方法的工具
*/
private IMusicPlayer player;
/**
* 更新歌曲播放信息的线程
*/
private UpdateProgressThread updateProgressThread;
/**
* 播放器是否已经开始运行
*/
private boolean isPlayerWorking;
/**
* 用户是否正在拖拽进度条
*/
private boolean isUserTrackingTouch;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 绑定Service
    Intent intent = new Intent(this, PlayMusicService.class);
    conn = new InnerServiceConnection();
    bindService(intent, conn, BIND_AUTO_CREATE);

    // 初始化控件
    lvMusics = (ListView) findViewById(R.id.lv_musics);
    ibPlayOrPause = (ImageButton) findViewById

(R.id.ib_play_or_pause);
ibPrevious = (ImageButton) findViewById(R.id.ib_previous);
ibNext = (ImageButton) findViewById(R.id.ib_next);
tvMusicTitle = (TextView) findViewById(R.id.tv_music_title);
sbMusicProgress = (SeekBar) findViewById(R.id.sb_music_progress);
tvMusicCurrentPosition = (TextView) findViewById

(R.id.tv_music_current_position);
tvMusicDuration = (TextView) findViewById

(R.id.tv_music_duration);

    // 获取歌曲列表的数据
    app = (MusicPlayerApplication) getApplication();
    musics = app.getMusics();

    // 显示歌曲列表的ListView
    musicAdapter = new MusicAdapter(this, musics);
    lvMusics.setAdapter(musicAdapter);

    // 为按钮配置监听器
    ibPlayOrPause.setOnClickListener(this);
    ibPrevious.setOnClickListener(this);
    ibNext.setOnClickListener(this);

    // 为ListView配置监听器
    lvMusics.setOnItemClickListener(this);

    // 为SeekBar配置监听器
    sbMusicProgress.setOnSeekBarChangeListener(this);
}

@Override
protected void onRestart() {
    // 判断是否正在播放
    if(player.callIsPlaying()) {
        // 开启线程更新播放信息
        startUpdateProgressThread();
    }

    super.onRestart();
}

@Override
protected void onStop() {
    // 停止更新播放信息
    stopUpdateProgressThread();

    super.onStop();
}

@Override
protected void onDestroy() {
    // 解除与Service的绑定
    if (conn != null) {
        unbindService(conn);
    }

    super.onDestroy();
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.ib_play_or_pause:
        // 判断当前的状态
        if (player.callIsPlaying()) {
            // 正在播放,则暂停
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值