代码如下:package com.download.services;
import android.content.Intent;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import com.download.entities.FileInfo;
import java.io.File;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
/**
-
Created by Administrator on 2017/10/27.
*/
public class DownloadService extends android.app.Service {public static final String DOWNLOAD_PATH =
Environment.getDownloadCacheDirectory().getAbsolutePath() +
"/downloads/";
public static final String ACTION_START = "ACTION_START";
public static final String ACTION_STOP = "ACTION_STOP";
public static final int MSG_INIT = 0;@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (ACTION_START.equals(intent.getAction())) {
FileInfo fileInfo = (FileInfo) intent.getSerializableExtra("fileInfo");
Log.i("test", "Start:" + fileInfo);
//启动初始化线程
new InitThread(fileInfo).start();
} else if (ACTION_STOP.equals(intent.getAction())) {
FileInfo fileInfo = (FileInfo) intent.getSerializableExtra("fileInfo");
Log.i("test", "Stop:" + fileInfo.toString());
}
return super.onStartCommand(intent, flags, startId);
}@Override
public IBinder onBind(Intent intent) {
return null;
}Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_INIT:
FileInfo fileInfo = (FileInfo) msg.obj;
Log.i("test", "Init:" + fileInfo);
break;
}
super.handleMessage(msg);
}
};/**
-
初始化子线程
*/
class InitThread extends Thread {
private FileInfo mFileInfo = null;public InitThread(FileInfo mFileInfo) {
this.mFileInfo = mFileInfo;
}public void run() {
HttpURLConnection con = null;try { //连接网络文件 URL url = new URL(mFileInfo.getUrl()); con = (HttpURLConnection) url.openConnection(); con.setConnectTimeout(3000); con.setRequestMethod("GET"); int length = -1; if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { //获得文件长度 length = con.getContentLength(); } if (length <= 0) { return; } File dir = new File(DOWNLOAD_PATH); //文件路径是否存在 if (!dir.exists()) { //创建路径 dir.mkdir(); } //在本地创建文件 File file = new File(dir, mFileInfo.getFileName()); file.createNewFile(); RandomAccessFile raf = new RandomAccessFile(file, "r"); //设置文件长度 raf.setLength(length); mFileInfo.setLength(length); mHandler.obtainMessage(MSG_INIT, mFileInfo).sendToTarget(); try { con.disconnect();
// raf.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
我是初学Android,会不会是Android虚拟机不支持外置内存卡的问题?而且使用raf.close时会报raf为初始化
-