零、前言
1.上篇中MyBinder暴漏在外,亲自上阵,执行方法。Binder是连接者,能不出面尽量不出面,一个"电话(接口)"搞定的事就不要让他老人家(MyBinder)亲自跑一趟。面向接口,隐藏不必要的对象。
2.说服务怎能少得了音乐播放器,这里只写写伪方法,后面在多媒体篇会来完善。
一、代码实现
1.服务方法接口
/**
* 作者:张风捷特烈
* 时间:2018/8/25 0025:11:09
* 邮箱:1981462002@qq.com
* 说明:服务方法接口
*/
public interface IMService {
/**
* 播放音乐
*/
void playMusic();
/**
* 暂停音乐
*/
void pauseMusic();
/**
* 继续播放音乐
*/
void rePlayMusic();
}
2.音乐服务:MusicService
public class MusicService extends Service {
private static final String TAG = "MusicService";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MusicBinder();
}
private class MusicBinder extends Binder implements IMService {
@Override
public void playMusic() {
Log.e(TAG, "playMusic: ");
}
@Override
public void pauseMusic() {
Log.e(TAG, "pauseMusic: ");
}
@Override
public void rePlayMusic() {
Log.e(TAG, "rePlayMusic: ");
}
}
}
3.MusicActivity
public class MusicActivity extends Activity {
@BindView(R.id.btn_music_play)
Button mBtnMusicPlay;
@BindView(R.id.btn_music_stop)
Button mBtnMusicStop;
@BindView(R.id.btn_music_continue)
Button mBtnMusicContinue;
private ServiceConnection mConn;
private IMService mImservice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music);
ButterKnife.bind(this);
bindMusic();
}
private void bindMusic() {
// [0]保证服务长期运行
Intent intent = new Intent(this, MusicService.class);
startService(intent);
// [1]调用bindservice 目的是为了获取我们定义的中间人对象
mConn = new ServiceConnection() {
@Override // 当连接成功时候调用
public void onServiceConnected(ComponentName name, IBinder service) {
mImservice = (IMService) service;// 获取我们定义的中间人对象
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
// 连接MusicService 服务 获取我们定义的中间人对象
bindService(intent, mConn, BIND_AUTO_CREATE);
}
@OnClick({R.id.btn_music_play, R.id.btn_music_stop, R.id.btn_music_continue})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_music_play: // 播放音乐
mImservice.playMusic();
break;
case R.id.btn_music_stop:// 暂停音乐
mImservice.pauseMusic();
break;
case R.id.btn_music_continue:// 继续音乐
mImservice.rePlayMusic();
break;
}
}
@Override
protected void onDestroy() {
// 当activity销毁的时候 取消绑定服务
if (mConn != null) {
unbindService(mConn);
}
super.onDestroy();
}
}
附录、布局文件:activity_music.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_music_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="音乐播放" />
<Button
android:id="@+id/btn_music_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="音乐暂停" />
<Button
android:id="@+id/btn_music_continue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="音乐继续" />
</LinearLayout>
后记、
1.声明:
[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力
2.连接传送门:
更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com
3.联系我
QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328