开启服务(播放音乐)
首先创建一个类,继承Service
···
package com.example.ytest11_service;
import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service{
private MediaPlayer mediaPlayer;
private MyIBinder myIBinder;
private boolean isfist=true;
@Override
public IBinder onBind(Intent intent) {
myIBinder = new MyIBinder();
Log.e("TAG", "onBind");
return myIBinder;
}
// 当服务创建的时候
@Override
public void onCreate() {
super.onCreate();
mediaPlayer = new MediaPlayer();
Log.e("TAG", "onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("TAG", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public boolean onUnbind(Intent intent) {
Log.e("TAG", "onUnbind");
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
Log.e("TAG", "onDestroy");
super.onDestroy();
}
public void playMusic(){
Log.e("TAG", "setDataSource");
if (isfist==true) {
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/金玟岐 - 岁月神偷 (Demo).mp3");
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
}
mediaPlayer.start();
}
public void stopMusic(){
mediaPlayer.pause();
isfist=false;
}
class MyIBinder extends Binder{
public void play(){
playMusic();
Log.e("TAG", "setDataSource");
}
public void pause(){
stopMusic();
}
}
}
MainActivity 中
···
package com.example.ytest11_service;
import com.example.ytest11_service.MyService.MyIBinder;
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.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity {
private Intent service;
private MyIBinder myIBinder;
private MyServiceConnetion myServiceConnetion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
service = new Intent(MainActivity.this,MyService.class);
//开启 创建并开启
findViewById(R.id.btn1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startService(service);
myServiceConnetion = new MyServiceConnetion();
bindService(service, myServiceConnetion, BIND_AUTO_CREATE);
}
});
//关闭
findViewById(R.id.btn2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
stopService(service);
}
});
//绑定(服务)创建服务并连接服务, 不开启
findViewById(R.id.btn3).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myServiceConnetion = new MyServiceConnetion();
bindService(service, myServiceConnetion, BIND_AUTO_CREATE);
}
});
//解绑
findViewById(R.id.btn4).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (myServiceConnetion!=null) {
unbindService(myServiceConnetion);
myServiceConnetion=null;
}
}
});
//播放
findViewById(R.id.btn5).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myIBinder.play();
Log.e("TAG", "setDataSource");
}
});
//暂停
findViewById(R.id.btn6).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myIBinder.pause();
}
});
}
class MyServiceConnetion implements ServiceConnection{
@Override//当与服务连接时
public void onServiceConnected(ComponentName name, IBinder service) {
myIBinder = (MyIBinder) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
}
···
效果图
image.png
···