android 获取服务对象,android – 如何在活动中获取服务对象?

这是我的服务代码:

public class DownloadService extends Service {

LocalBroadcastManager mLocalBroadcastManager;

ArrayList dat = new ArrayList();

@Override

public IBinder onBind(Intent arg0) {

return null;

}

@Override

public void onStart( Intent intent, int startId ) {

super.onStart( intent, startId );

Log.d("service","DownloadService started");

}

public void startDownload(String url, String fname, ProgressBar pBar){

int dID = dat.size();

Log.d("status","dat length:"+dID);

dat.add( new DownloadAsyncTask(url,fname,pBar));

dat.get(dID).execute();

}

public void cancelDownload(String fname){

for(DownloadAsyncTask da: dat){

if(da.getName().equals(fname)){

da.cancel(true);

}

}

}

public DownloadAsyncTask getDownloadByName(String fname){

for(DownloadAsyncTask da: dat){

if(da.getName().equals(fname)){

return da;

}

}

return null;

}

public ArrayList getAllDownloads(){

return dat;

}

public class DownloadAsyncTask extends AsyncTask{

ProgressBar progressBar;

File sdCard = Environment.getExternalStorageDirectory();

File dir = new File (sdCard.getAbsolutePath() + "/com.ms.rightel.store/");

int percentage = 0;

static final int DOWNLOAD_STATUS_FINISHED = 1;

static final int DOWNLOAD_STATUS_RUNNING = 0;

static final int DOWNLOAD_STATUS_FAILED = -1;

static final int DOWNLOAD_STATUS_PAUSED = 2;

int status = DOWNLOAD_STATUS_RUNNING;

double fileSize = 0;

String downloadUrl,fileName;

public DownloadAsyncTask(String url, String fname, ProgressBar pBar){

downloadUrl = url;

fileName = fname;

progressBar = pBar;

}

public String getName(){

return fileName;

}

public void replaceProgressBar(ProgressBar pBar){

progressBar = pBar;

}

private boolean checkDirs(){

if(!dir.exists()){

return dir.mkdirs();

}

return true;

}

public int getDownloadStatus(){

return status;

}

private long isIncomplete(){

File from = new File(dir,fileName+"-incomplete");

if(from.exists()){

Log.d("status","download is incomplete, filesize:" + from.length());

return from.length();

}

return 0;

}

@Override

protected String doInBackground(String... params) {

//fileName = downloadUrl.substring(downloadUrl.lastIndexOf("/")+1);

if(!checkDirs()){

return "Making directories failed!";

}

try {

byte[] buffer = new byte[500];

int bufferLength = 0;

double downloadedSize = 0;

URL url = new URL(downloadUrl);

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

urlConnection.setRequestMethod("GET");

urlConnection.setConnectTimeout(10000);

urlConnection.setReadTimeout(10000);

//Log.d("status","ReadTimeOut: "+urlConnection.getReadTimeout() + "ConnectTimeOut: "+urlConnection.getConnectTimeout());

long downloaded = isIncomplete();

if(downloaded > 0){

urlConnection.setRequestProperty("Range", "bytes="+(downloaded)+"-");

downloadedSize = downloaded;

fileSize = downloaded;

}

urlConnection.setDoOutput(true);

urlConnection.connect();

fileSize += urlConnection.getContentLength();

FileOutputStream fos = new FileOutputStream(new File(dir,fileName+"-incomplete"),true);

InputStream inputStream = urlConnection.getInputStream();

while ( (bufferLength = inputStream.read(buffer)) > 0 )

{

if(isCancelled()){

break;

}

fos.write(buffer, 0, bufferLength);

downloadedSize += bufferLength;

percentage = (int) ((downloadedSize / fileSize) * 100);

publishProgress(percentage);

//Log.d("status","downloading: " + downloadedSize+"/"+fileSize+" ("+percentage+"%)");

}

fos.close();

urlConnection.disconnect();

} catch (Exception e) {

Log.e("Download Failed","Error: " + e.getMessage());

return "Download failed";

}

if(isCancelled()){

return "Download cancelled";

}

return "Download complete";

}

@Override

protected void onProgressUpdate(Integer... values){

super.onProgressUpdate(values[0]);

if(progressBar != null){

progressBar.setProgress(values[0]);

}else{

Log.w("status", "ProgressBar is null, please supply one!");

}

}

@Override

protected void onPreExecute(){

mLocalBroadcastManager.sendBroadcast(new Intent("org.test.download.DOWNLOAD_STARTED"));

}

@Override

protected void onPostExecute(String str){

if(str.equals("Download complete")){

File from = new File(dir,fileName+"-incomplete");

File to = new File(dir,fileName);

from.renameTo(to);

mLocalBroadcastManager.sendBroadcast(new Intent("org.test.download.DOWNLOAD_FINISHED"));

}

if(str.equals("Download failed")){

mLocalBroadcastManager.sendBroadcast(new Intent("org.test.download.DOWNLOAD_FAILED"));

}

}

@Override

protected void onCancelled(){

mLocalBroadcastManager.sendBroadcast(new Intent("org.test.download.DOWNLOAD_CANCELLED"));

}

}

}

我正在使用此服务来管理多个下载.现在我需要在不同的活动中访问此服务对象,以便能够添加到下载或获取当前正在运行的下载列表.我怎样才能做到这一点?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值