1.主函数
public class MainActivity extends AppCompatActivity{
private SurfaceView sur;
private SeekBar seek;
private SurfaceHolder holder;
private xc xc1;
private MediaPlayer mediaPlayer;
private guanbo guanbo;
private boolean flag=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inten();
}
private void inten() {
sur=(SurfaceView)findViewById(R.id.surfaceView);
seek=(SeekBar)findViewById(R.id.seekBar);
mediaPlayer= MediaPlayer.create(this, R.raw.a);
guanbo= new guanbo();
registerReceiver(guanbo,new IntentFilter("alice"));
holder = sur.getHolder();
holder.setKeepScreenOn(true);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
seek.setMax(mediaPlayer.getDuration());
seek.setProgress(0);
seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(b)
mediaPlayer.seekTo(i);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
mediaPlayer.pause();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mediaPlayer.start();
}
});
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
if (mediaPlayer!=null){
mediaPlayer.setDisplay(surfaceHolder);
}
new xc().start();
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
});
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.play_bt:
// 开始播放
if (mediaPlayer != null && !mediaPlayer.isPlaying())
mediaPlayer.start();
break;
case R.id.pause_bt:
if (mediaPlayer != null && mediaPlayer.isPlaying())
mediaPlayer.pause();
break;
}
}
class xc extends Thread{
@Override
public void run() {
super.run();
Intent intent = new Intent("alice");
while (flag){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(mediaPlayer!=null){
int currentPosition = mediaPlayer.getCurrentPosition();
intent.putExtra("pro",currentPosition);
sendBroadcast(intent);
}
}
}
}
class guanbo extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
int pro = intent.getIntExtra("pro", 0);
Log.d("fake",String.valueOf(pro));
seek.setProgress(pro);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
flag=false;
unregisterReceiver(guanbo);
if(mediaPlayer!=null){
mediaPlayer.release();
mediaPlayer=null;
}
}
}
2.主布局
<?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:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context="com.example.bofangqi.MainActivity"
android:orientation="vertical">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="400dp" />
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/play_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="播放" />
<Button
android:id="@+id/pause_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="暂停" />
</LinearLayout>
</LinearLayout>