通过bindService方法来调用服务final Down down = data;
viewHolder.videoActionBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(bEditMode) {
// 处于编辑模式,点击删除
deleteDown(down);
} else {
// 处于播放模式,点击播放
VideoItemData video = (new Gson()).fromJson(down.getData(),
VideoItemData.class);
if(video != null) {
video.setMp4Url(down.getSavaPath());
VideoUtils.playVideo(context, video);
}
}
}
});
调用Service来删除Down。在ServiceConnection对象的onServiceConnected方法中,执行删除操作之后,调用unbindService方法来解绑定操作。
/**
* 删除下载的记录和内容。
*
* @param down
*/
private void deleteDown(final Down down){
Intent intent = new Intent(context, DownService.class);
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
((DownBinder)service).deleteDown(down, true);
context.unbindService(this);
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
context.bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
在Service类中定义Binder的子类。public class DownBinder extends Binder implements IDown {
@Override
public Down downVideo(VideoItemData video) {
if (!NetUtil.hasNetwork(context)) {
UIUtils.showToast(context, "网络不给力");
return null;
}
if (!SettingSharedPreference.getInstance().getCacheWith2G3G() && !NetUtil.hasWifiNetWork(context)) {
UIUtils.showToast(context, "已经禁止2G/3G网络下载视频");
return null;
}
synchronized (downList) {
for (Down down : downList) {
// 如果已经在下载列表中,直接返回down对象。
if (down.getUrl().equals(video.getMp4Url())) {
UIUtils.showToast(context, "已经在下载列表中");
return down;
}
}
}
// 如果是一个新的下载,发送消息开始一个新的下载。
Message.obtain(handler, DOWN_URL, video).sendToTarget();
return null;
}
@Override
public List getAllDown() {
return getDownList();
}
@Override
public void pauseDown(Down down) {
downHandler.removeMessages(START_DOWN);
down = getExistDown(down);
downHandler.sendMessage(downHandler.obtainMessage(PAUSE_DOWN, down));
}
@Override
public void startDown(Down down) {
downHandler.removeMessages(PAUSE_DOWN);
down = getExistDown(down);
downHandler.sendMessage(downHandler.obtainMessage(START_DOWN, down));
}
/**
* 取出对应的Down 从downList中取出的Down都赋值了DownTask
*
* @param down
* @return
*/
private Down getExistDown(Down down) {
for (Down d : downList) {
if (down.getUrl().equals(d.getUrl())) {
return d;
}
}
return down;
}
@Override
public void deleteDown(Down down, boolean deleteFile) {
downHandler.removeMessages(START_DOWN);
downHandler.removeMessages(PAUSE_DOWN);
down = getExistDown(down);
downHandler.obtainMessage(DELETE_DOWN, (deleteFile ? 1 : 0), 0, down).sendToTarget();
}
@Override
public void clearDown(boolean deleteFile) {
downHandler.removeMessages(START_DOWN);
downHandler.removeMessages(PAUSE_DOWN);
downHandler.obtainMessage(CLEAR_DOWN, deleteFile).sendToTarget();
}
@Override
public void reStartDown(Down down) {
down = getExistDown(down);
downHandler.obtainMessage(RESTART_DOWN, down).sendToTarget();
}
}
在onCreate方法中创建DownBinder实例。downBinder = new DownBinder();
在onBind方法中返回DownBinder实例。
@Override
public IBinder onBind(Intent intent) {
return downBinder;
}