音乐播放器说明
1.音乐播放器的逻辑,音乐列表数据封装在Service里面
Activity和Service进行交互–aidl(服务的代理类)-Handler BroadcastReceiver 和EventBus
2.显示音乐播放时间,演唱者,点击上一个音乐,歌词同步等在Activity做。
AIDL小案例
1.定义一个服务
```cpp
public class MyService extends Service {
private AIDLActivity callback;
@Override
public void onCreate() {
Log.e("yangguangfu", "MyService.onCreate");
}
@Override
public void onStart(Intent intent, int startId) {
Log.e("yangguangfu", "MyService.onStart startId="+startId);
}
@Override
public IBinder onBind(Intent t) {
Log.e("yangguangfu", "MyService.onBind");
return mBinder;
}
private String getNames(){
Log.e("yangguangfu", "MyService.getName");
return "name from service";
}
private int getAges(){
Log.e("yangguangfu", "MyService.getAge");
return 24;
}
//由aidl文件生成的
private final AIDLService.Stub mBinder = new AIDLService.Stub() {
@Override
public void invokCallBack() throws RemoteException {
Log.e("yangguangfu", "MyService.AIDLService.invokCallBack");
Rect1 rect = new Rect1();
rect.bottom=-1;
rect.left=-1;
rect.right=1;
rect.top=1;
callback.performAction(rect);
}
@Override
public void registerTestCall(AIDLActivity cb) throws RemoteException {
Log.e("yangguangfu", "MyService.AIDLService.registerTestCall");
callback = cb;
}
@Override
public String getName() throws RemoteException {
Log.e("yangguangfu", "MyService.AIDLService.getName");
return getNames();
}
@Override
public int getAge() throws RemoteException {
Log.e("yangguangfu", "MyService.AIDLService.getAge");
return getAges();
}
};
}
2.定义aidl文件
interface AIDLService {
void registerTestCall(AIDLActivity cb);
void invokCallBack();
String getName();
int getAge();
}
3.Service需要在功能清单文件注册
<service android:name="com.yanguangfu.binder.MyService" >
<intent-filter>
<action android:name="com.yanguangfu.binder.action.AIDLService" />
</intent-filter>
</service>
4.绑定方式启动服务
Bundle args = new Bundle();
Intent intent = new Intent();
intent.setAction("com.yanguangfu.binder.action.AIDLService");
intent.putExtras(args);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
// startService(intent);
创建MediaService.java和IMediaService.aidl
1.创建MediaService服务,里面写常用的方法,start,pause
在功能清单文件注册
public class MediaService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
/**
* 根据位置打开音乐
* @param position
*/
private void openAudio(int position){
}
/**
* 播放音乐
*/
private void start(){
}
/**
* 暂停音乐
*/
private void pause(){
}
/**
* 下一首
*/
private void next(){
}
/**
* 上一首
*/
private void pre(){
}
/**
* 得到播放模式
* @return
*/
private int getPlaymode(){
return 0;
}
/**
* 设置播放模式
* @param playmode
*/
private void setPlaymode(int playmode){
}
/**
* 得到当前播放进度
* @return
*/
private int getCurrentPosition(){
return 0;
}
/**
* 得到当前的总时长
* @return
*/
private int getDuration(){
return 0;
}
/**
* 得到歌曲的名称
* @return
*/
private String getName(){
return "";
}
/**
* 得到演唱者
* @return
*/
private String getArtist(){
return "";
}
/**
* 音频的拖动
* @param seekto
*/
private void seekTo(int seekto){
}
}
2.创建IMediaService.aidl
interface IMediaService {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
/**
* 根据位置打开音乐
* @param position
*/
void openAudio(int position);
/**
* 播放音乐
*/
void start();
/**
* 暂停音乐
*/
void pause();
/**
* 下一首
*/
void next();
/**
* 上一首
*/
void pre();
/**
* 得到播放模式
* @return
*/
int getPlaymode();
/**
* 设置播放模式
* @param playmode
*/
void setPlaymode(int playmode);
/**
* 得到当前播放进度
* @return
*/
int getCurrentPosition();
/**
* 得到当前的总时长
* @return
*/
int getDuration();
/**
* 得到歌曲的名称
* @return
*/
String getName();
/**
* 得到演唱者
* @return
*/
String getArtist();
/**
* 音频的拖动
* @param seekto
*/
void seekTo(int seekto);
}
3.在服务里面重新onBind
4.绑定方式启动服务
5.播放音乐
链接:https://pan.baidu.com/s/1Ex-eTqkc_q3TNzvNJ8F11A
提取码:kx22