public class StringUtils { public static String getStr(String path){ String[] strs = path.split("/"); return strs[strs.length-1]; } }
public class SdCardUtils { public static void saveDataToSdcard(byte[] data,String filename){ File file = Environment.getExternalStorageDirectory(); Log.i("Mian",file.getAbsolutePath()); File file2 = new File(file,filename); try { FileOutputStream fos = new FileOutputStream(file2); fos.write(data); fos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
public class MainActivity extends AppCompatActivity { private ImageView imageView; private Intent intent ; private String path = "http://www.baidu.com/img/bdlogo.gif"; private String filename; private String bitmap_path; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.image); filename = StringUtils.getStr(path); bitmap_path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+filename; } public void download(View view){ intent = new Intent(this,MyService.class); intent.putExtra("key",path); startService(intent); } public void see(View view){ Bitmap bitmap = BitmapFactory.decodeFile(bitmap_path); if(bitmap!=null){ imageView.setImageBitmap(bitmap); } } }
public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { final String path = intent.getStringExtra("key"); new Thread(new Runnable() { @Override public void run() { try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024 * 2]; int ret; while ((ret = is.read(buffer)) > 0) { baos.write(buffer, 0, ret); } //保存到内存卡 SdCardUtils.saveDataToSdcard(baos.toByteArray(), StringUtils.getStr(path)); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } }
* 图片下载完成后增加通知
优化MyService类
public class MyService extends Service { private NotificationManager manager; private NotificationCompat.Builder builder; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); manager = (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE); builder = new NotificationCompat.Builder(getApplicationContext()); builder.setAutoCancel(true); builder.setContentText("下载完成"); builder.setContentTitle("通知"); builder.setSmallIcon(R.mipmap.ic_launcher); Intent intent = new Intent(this,MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),0,intent,PendingIntent.FLAG_ONE_SHOT); builder.setContentIntent(pendingIntent); } @Override public int onStartCommand(Intent intent, int flags, int startId) { final String path = intent.getStringExtra("key"); new Thread(new Runnable() { @Override public void run() { try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024 * 2]; int ret; while ((ret = is.read(buffer)) > 0) { baos.write(buffer, 0, ret); } //保存到内存卡 SdCardUtils.saveDataToSdcard(baos.toByteArray(), StringUtils.getStr(path)); manager.notify(1,builder.build()); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } }