【练习】使用服务下载图片并保存到sdcard
2016-04-15 10:47
281 查看
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(); } }
相关文章推荐
- php多虚拟主机配置
- 评论
- ArcEngine地图窗口指定区域导出指定DPI多格式---delphi/C#实现
- Linux openssl 实现
- 不正确的使用HashMap引发死循环及元素丢失
- 【 视频 】crf与bitrate对照表
- Mysql 免安装版配置
- 图的深度优先遍历和广度优先遍历--邻接矩阵法
- Learning Scrapy笔记(五)- Scrapy登录网站
- printf in KEIL C51
- 使用NPOI操纵Excle,并输入到客户端
- NLTEST to test the trust relationship between a workstation and domain
- Android动态改变Background后Padding无效的问题
- NodeJS、NPM安装配置步骤(windows版本)
- 知识小札
- 源码nginx+php 7.0+mysql搭建WordPress
- leetcode66题 题解 翻译 C语言版 Python版
- iOS 在只能输入15个字符的情况下由于属于表情占两个字符,最后一个表情损坏
- 使用log4j的时候如何输出printStackTrace()的堆栈信息
- laravel5 artisan