package com.sinata.download.service;
|
|
import android.app.IntentService;
|
import android.app.Notification;
|
import android.content.Intent;
|
import android.os.Handler;
|
import android.os.Message;
|
import android.widget.RemoteViews;
|
|
import androidx.annotation.Nullable;
|
|
import com.sinata.download.DownloadLibrary;
|
import com.sinata.download.R;
|
import com.sinata.download.http.DownLoadManager;
|
import com.sinata.download.http.DownloadListener;
|
import com.sinata.download.utils.Utils;
|
import com.sinata.download.utils.notification.MessageNoticeManager;
|
|
import java.io.File;
|
|
/**
|
* author:Created by zhaohaoting on 2019/1/30
|
* email:526309416@qq.com
|
* desc:下载视频
|
*/
|
public class DownloadService extends IntentService {
|
|
private static final int NOTIFY_DOWNLOAD = 0;
|
private static final int NOTIFY_FINISH = 1;
|
private static final int NOTIFY_FAILURE = 2;
|
//下载音乐
|
public static final int TYPE_MUSIC = 0;
|
//下载视频
|
public static final int TYPE_VIDEO = 1;
|
//下载图片
|
public static final int TYPE_PICTURE = 2;
|
//下载apk
|
public static final int TYPE_APK = 3;
|
//下载其它文件
|
public static final int TYPE_FILE = 4;
|
|
private int type;
|
|
@Override
|
public void onCreate() {
|
super.onCreate();
|
}
|
|
private Handler mHandler = new Handler(new Handler.Callback() {
|
@Override
|
public boolean handleMessage(Message msg) {
|
switch (msg.what) {
|
case 0:
|
createNotification(NOTIFY_DOWNLOAD, 0, null);
|
break;
|
case 1:
|
createNotification(NOTIFY_DOWNLOAD, msg.arg1, null);
|
break;
|
case 2:
|
createNotification(NOTIFY_FINISH, 0, msg.obj);
|
if (type == TYPE_APK) {
|
ApkDownLoadListener apkDownLoadListener = DownloadLibrary.getApkDownLoadListener();
|
if (apkDownLoadListener != null) {
|
apkDownLoadListener.downLoadSuccess((String) msg.obj);
|
}
|
}
|
break;
|
case 3:
|
createNotification(NOTIFY_FAILURE, 0, null);
|
break;
|
}
|
return true;
|
}
|
});
|
|
public DownloadService() {
|
super("DownloadService");
|
}
|
|
@Override
|
protected void onHandleIntent(@Nullable Intent intent) {
|
if (intent != null) {
|
String url = intent.getStringExtra("url");
|
type = intent.getIntExtra("type", 4);
|
String[] split = url.split("/");
|
int length = split.length;
|
if (length <= 0) return;
|
String fileName = split[length - 1];
|
switch (type) {
|
case TYPE_MUSIC:
|
download(url, DownloadLibrary.MUSIC_PATH + fileName);
|
break;
|
case TYPE_VIDEO:
|
download(url, DownloadLibrary.VIDEO_PATH + fileName);
|
break;
|
case TYPE_PICTURE:
|
download(url, DownloadLibrary.PICTURE_PATH + fileName);
|
break;
|
case TYPE_APK:
|
download(url, DownloadLibrary.APK_PATH + fileName);
|
break;
|
case TYPE_FILE:
|
download(url, DownloadLibrary.FILE_PATH + fileName);
|
break;
|
}
|
}
|
}
|
|
/**
|
* 下载
|
*
|
* @param url
|
* @param filePath 文件保存全路径
|
*/
|
private void download(String url, final String filePath) {
|
DownLoadManager.downLoadFile(url, filePath, new DownloadListener() {
|
|
int progress = 0;
|
|
@Override
|
public void onStartDownload() {
|
Message message = Message.obtain(mHandler);
|
message.what = 0;
|
message.sendToTarget();
|
}
|
|
@Override
|
public void onProgress(final int progress) {
|
if (this.progress != progress) {
|
this.progress = progress;
|
Message message = Message.obtain(mHandler);
|
message.what = 1;
|
message.arg1 = progress;
|
message.sendToTarget();
|
}
|
}
|
|
@Override
|
public void onFinishDownload(boolean isHasLocation) {
|
Message message = Message.obtain(mHandler);
|
message.what = 2;
|
message.obj = filePath;
|
message.sendToTarget();
|
if (type == TYPE_VIDEO) {
|
Utils.insertIntoMediaStore(DownloadService.this, true, new File(filePath), System.currentTimeMillis());
|
} else if (type == TYPE_PICTURE) {
|
Utils.insertIntoMediaStore(DownloadService.this, false, new File(filePath), System.currentTimeMillis());
|
} else if (type == TYPE_APK) {
|
|
// Utils.installApk(DownloadService.this, filePath);
|
}
|
}
|
|
@Override
|
public void onFail(String errorInfo) {
|
Message message = Message.obtain(mHandler);
|
message.what = 3;
|
message.sendToTarget();
|
}
|
});
|
}
|
|
/**
|
* 设置通知
|
*
|
* @param notifyId
|
* @param progress
|
*/
|
private void createNotification(int notifyId, int progress, Object obj) {
|
switch (notifyId) {
|
case NOTIFY_DOWNLOAD:
|
RemoteViews remoteViews = new RemoteViews(DownloadLibrary.getContext().getApplicationInfo().packageName, R.layout.notify_custom_view_layout);
|
remoteViews.setTextViewText(R.id.notify_tv, getString(R.string.downloading_));
|
remoteViews.setProgressBar(R.id.notify_progress_pb, 100, progress, false);
|
if (progress == 0) {
|
remoteViews.setTextViewText(R.id.notify_progress_tv, getString(R.string.loading_));
|
} else {
|
remoteViews.setTextViewText(R.id.notify_progress_tv, progress + "%");
|
}
|
remoteViews.setImageViewResource(R.id.notify_download_iv, DownloadLibrary.getIc_launcher());
|
Notification notice1 = MessageNoticeManager.getInstance().createNotice(this, remoteViews);
|
MessageNoticeManager.getInstance().notify(NOTIFY_DOWNLOAD, notice1);
|
break;
|
case NOTIFY_FINISH:
|
Notification notice = MessageNoticeManager.getInstance().createNotice(this, getString(R.string.download_done), getString(R.string.save_location_ed), getString(R.string.download_done), Utils.getEntranceIntent(this, (String) obj));
|
MessageNoticeManager.getInstance().notify(NOTIFY_FINISH, notice);
|
MessageNoticeManager.getInstance().cancel(NOTIFY_DOWNLOAD);
|
break;
|
case NOTIFY_FAILURE:
|
Notification notice2 = MessageNoticeManager.getInstance().createNotice(this, getString(R.string.download_faliure), getString(R.string.download_tips_desc), getString(R.string.download_faliure));
|
MessageNoticeManager.getInstance().notify(NOTIFY_FAILURE, notice2);
|
MessageNoticeManager.getInstance().cancel(NOTIFY_DOWNLOAD);
|
break;
|
default:
|
break;
|
}
|
}
|
|
|
}
|