package yifeiyuan.practice.practicedemos; import android.app.IntentService; import android.content.Intent; import android.os.Environment; import android.os.IBinder; import android.text.TextUtils; import android.util.Log; import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class DownloadService extends IntentService { public static final String TAG = "DownloadService"; public static final String EXTRA_PATH = "yfy.practice.filepath"; public DownloadService() { super("DownloadService"); } String mUrl; @Override protected void onHandleIntent(Intent intent) { mUrl = intent.getStringExtra(EXTRA_PATH); if (TextUtils.isEmpty(mUrl)) { stopSelf(); } else { download(); } } private void download() { try { //file:/storage/emulated/0/test.apk File file = new File(Environment.getExternalStorageDirectory(), "test.apk"); Log.d(TAG, "download: file:" + file.getPath()); URL url = new URL(mUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); InputStream in = connection.getInputStream(); BufferedInputStream bis = new BufferedInputStream(in); if (!file.exists()) { file.createNewFile(); } else { file.delete(); file.createNewFile(); } FileOutputStream fos = new FileOutputStream(file); byte[] buffer = new byte[1024]; int size = -1; while ((size = bis.read(buffer)) != -1) { fos.write(buffer, 0, size); } fos.flush(); fos.close(); bis.close(); connection.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override public void setIntentRedelivery(boolean enabled) { super.setIntentRedelivery(enabled); Log.d(TAG, "setIntentRedelivery() called with: " + "enabled = [" + enabled + "]"); } @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate: "); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.d(TAG, "onStart() called with: " + "intent = [" + intent + "], startId = [" + startId + "]"); } // onStartCommand 里调用了onstart @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand() called with: " + "flags = [" + flags + "], startId = [" + startId + "]"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy() called with: " + ""); } @Override public IBinder onBind(Intent intent) { Log.d(TAG, "onBind() called with: " + "intent = [" + intent + "]"); return super.onBind(intent); } }