package codefans.app.activity;
import codefans.app.util.Mp3Util;
import codefans.mp3layer.R;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;
public class Mp3PlayerActivity extends Activity
{
private boolean flag = false; //播放 暂停 变量判断
private ImageButton playBt;
private SeekBar seekBar;
private Intent intent; //播放信息意图
private Bundle bundle; //意图传递的信息
private SeekBarReceiver receiver;
private int position; //播放进度条位置
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.playBt = (ImageButton) findViewById(R.id.play);
this.seekBar = (SeekBar) findViewById(R.id.seekBar);
//意图 启动service使用
this.intent = new Intent("codefans.action.Mp3Player");
bundle = new Bundle();
//注册广播接受器
receiver = new SeekBarReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("codefans.intent.action.Mp3Player");
this.registerReceiver(receiver, filter);
}
//播放按钮点击
public void mediaPlay(View v)
{
if(flag == false) //改变播放按钮图标
{
playBt.setImageResource(R.drawable.stop);
flag = true;
this.bundle.putString("filePath", "qq.mp3");
this.bundle.putInt("operate", Mp3Util.PLAY);
this.intent.putExtras(bundle);
startService(intent);
}
else
{
playBt.setImageResource(R.drawable.play);
flag = false;
this.bundle.putInt("operate", Mp3Util.STOP);
this.intent.putExtras(bundle);
startService(intent);
}
}
@Override
protected void onDestroy()
{
this.unregisterReceiver(receiver); //解除接受广播
super.onDestroy();
}
/**
* bindService 实现需要 这里使用startservice
* @author Codefans
*
//启动服务需要类
private class MyServiceConnection implements ServiceConnection
{
public void onServiceConnected(ComponentName name, IBinder service)
{
Mp3PlayerActivity.this.binder = (Player) service;
}
public void onServiceDisconnected(ComponentName name)
{
Mp3PlayerActivity.this.binder = null;
}
}
*/
/**
* 播放进度条 位置广播接受器
* @author Codefans
*
*/
private class SeekBarReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Mp3PlayerActivity.this.position = intent.getIntExtra("position", 0);
// Message msg = new Message();
Mp3PlayerActivity.this.seekBar.setProgress(position);
// Log.i("result", String.valueOf(position));
}
}
}
package codefans.app.service;
import java.io.File;
import java.io.IOException;
import codefans.app.util.Mp3Util;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
public class Mp3Service extends Service
{
private MediaPlayer mediaPlayer;
private File musicFile;
private String name;
@Override
public void onCreate()
{
if (this.mediaPlayer == null)
{
this.mediaPlayer = new MediaPlayer();
}
}
@Override
public void onDestroy()
{
if (this.mediaPlayer != null)
{
this.mediaPlayer.stop();
this.mediaPlayer.release();
this.mediaPlayer = null;
}
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Bundle bundle = intent.getExtras();
switch (bundle.getInt("operate"))
{
case Mp3Util.PLAY:
this.playMusci(bundle.getString("filePath"));
break;
case Mp3Util.STOP:
this.stop();
break;
}
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
// 开始播放
private void playMusci(String fileName)
{
try
{
if (fileName.equals(name)) //播放同文件
{
this.mediaPlayer.start();
}
else //播放不同文件
{
this.name = fileName;
this.musicFile = new File(
Environment.getExternalStorageDirectory(), fileName);
this.mediaPlayer.reset();
this.mediaPlayer.setDataSource(musicFile.getAbsolutePath());
this.mediaPlayer.prepare();
this.mediaPlayer
.setOnPreparedListener(new MyPreParedListenner());
Thread t = new SendBroadCastThread();
t.start();
}
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
catch (IllegalStateException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private void stop() //暂停
{
this.mediaPlayer.pause();
}
// mediaPlayer缓存完执行事件
private class MyPreParedListenner implements OnPreparedListener
{
public void onPrepared(MediaPlayer mp)
{
mp.start();
}
}
/**
* 发送播放位置线程, 每隔一秒发送一次广播 改变播放器进度条
* @author Codefans
*
*/
private class SendBroadCastThread extends Thread
{
@Override
public void run()
{
while(true)
{
Intent intent = new Intent();
intent.putExtra("position", Mp3Service.this.mediaPlayer.getCurrentPosition());
intent.setAction("codefans.intent.action.Mp3Player");// action与接收器相同
sendBroadcast(intent); //发送广播
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
/**
* 新建一个内部类 Activity调用service时返回此binder
*
* @author Codefans
*
* private class Mp3IBinder extends Binder implements Player {
*
* public void playMusic(String filePath) {
* Mp3Service.this.playMusci(filePath); }
*
* }
*/
}
代码也不知道怎么发 都发上来了
今天主要写了关闭Activity后台依然在唱歌 还有一个就是进度条跟随播放 前进