整个流程还是采用的之前的逻辑,即在Activity触发事件,交给IntentService去处理,并将处理的结果用broadcastReceiver发给Activity内的broadcastReceiver内部类处理,实现对UI的更新,而这个下载图片的过程则是放在了IntentService中进行处理

用URL下载网络上的图片首先要获取网络权限,否则执行到url.openStream()会重启

在AndroidManifest.xml中添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

在Activity中动态注册广播

try{broadcastReceiver = new ImageReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("com.example.space.text2.action.IMAGERECEIVER_URLCONNECTION");registerReceiver(broadcastReceiver,intentFilter);Log.i("mss"," registerReceiver(broadcastReceiver,intentFilter);bbbbbbb");}catch (ParcelFormatException e){Log.i("mss","catch");}

通过按钮的点击开启IntentService

       final Button buttondownload = (Button)super.findViewById(R.id.button3);final Button buttondisplay = (Button)super.findViewById(R.id.button7);buttondownload.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {try{Intent  intent = new Intent(TextActivity.this,TextIntentService.class);intent.setAction("com.example.space.text2.action.URLCONNECTION");intent.putExtra("url","http://img-cdn2.luoo.net/pics/vol/5a810230daa52.jpg"); TextActivity.this.startService(intent);}catch(ParcelFormatException e){Log.i("mss","catch");}}});

在IntentService的onHandleIntent方法中进行Intent的Action的判断

    @Overrideprotected void onHandleIntent(Intent intent) {//Log.i("mss","onHandleIntent");if (intent != null) {final String action = intent.getAction();if (ACTION_MSGFINSIH.equals(action)) {}else if("com.example.space.text2.action.URLCONNECTION".equals(action)){}

获取指定Action后进行图片的下载

 else if("com.example.space.text2.action.URLCONNECTION".equals(action)){//在这里要进行判断,看收到的intent是不是要求进行图片的下载URL url=null;String urlconnection = intent.getStringExtra("url");try{url = new URL(urlconnection);}catch(MalformedURLException e){Log.i("mss"," MalformedURLException");}try{InputStream inputStream = url.openStream();Bitmap bitmap = BitmapFactory.decodeStream(inputStream);inputStream.close();inputStream = url.openStream();OutputStream outputStream = openFileOutput(urlconnection.split("/")[urlconnection.split("/").length-1],MODE_PRIVATE);
//用urlconnection.split("/")[urlconnection.split("/").length-1],可以获取split后的最后一个元素即图片的名称byte[] bytes = new byte[10240];int hasread =0;while((hasread = inputStream.read(bytes))>0){outputStream.write(bytes,0,hasread);}inputStream.close();outputStream.close();Intent intent2 = new Intent("com.example.space.text2.action.IMAGERECEIVER_URLCONNECTION");intent2.putExtra("imagename",urlconnection.split("/")[urlconnection.split("/").length-1]);sendBroadcast(intent2);//下载完成,发送广播告知Activity可以更新组件了}catch(IOException r){}}

在Activity的broadcastReceiver内部类中获取IntentService返回的结果来更新组件

    public class ImageReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO: This method is called when the BroadcastReceiver is receiving// an Intent broadcast.if (intent != null) {final String action = intent.getAction();if ("com.example.space.text2.action.IMAGERECEIVER_URLCONNECTION".equals(action)) {String imagename = intent.getStringExtra("imagename");try{FileInputStream fileInputStream = openFileInput(imagename);Bitmap bitmap = BitmapFactory.decodeStream(fileInputStream);imageView.setImageBitmap(bitmap);Toast.makeText(getApplicationContext(), "imageView.setImageBitmap(bitmap)", Toast.LENGTH_SHORT).show();}catch(FileNotFoundException e){Toast.makeText(getApplicationContext(), "FileNotFoundException "+imagename, Toast.LENGTH_SHORT).show();}}}////Toast.makeText(getApplicationContext(), intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
//                    TextView textView = (TextView)FinsihActivity.super.findViewById(R.id.textView13);
//                    textView.setText(""+intent.getStringExtra("msg"));//throw new UnsupportedOperationException("Not yet implemented");}}

用URL在IntentService中下载图片并更新到ImageView相关推荐

  1. Java代码服务器上下载图片_Java如何从服务器中下载图片

    import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net ...

  2. 利用jsoup 如何从网页中下载图片

    来自:http://www.open-open.com/bbs/view/1320576549952 如何从网页中下载图片 如果做为爬虫很有必要从网页中下载图片到本地,那么我们利用jsoup来进行该操 ...

  3. 如何从网页中下载图片

    如果做为爬虫很有必要从网页中下载图片到本地,那么我们利用jsoup来进行该操作,jsoup 是一个很不错的html解析器. 网页中下载图片需要这么两步操作 1.获取绝对路径 很多网页中用的是相对路径, ...

  4. Kotlin学习——简单运用协程网络下载图片并更新到UI

    kotlin学习 协程Coroutines学习 简单小Demo:通过协程下载一张网络图片并显示出来 文章目录 kotlin学习 前言 一.如何开启一个协程? 二.如何在项目中使用协程 增加对 Kotl ...

  5. 在 C# 中下载图片

    使用 C# 中 WebClient 类下载图片 使用 C# 中的 Bitmap 类在不知道格式的情况下下载图片 使用 C# 中的Image.FromStream() 函数下载不知道格式的图片 1.使用 ...

  6. 如何从源代码中下载图片

    步骤: 以网易上的这张图为例 第一步:右击这张图在网易的所在位置 第二步:[检查] 第三步:在css样式中找到此图片所在的网址 第四步:右击此图片所在的网址 第五步:[Open in new tab] ...

  7. vue中下载图片到本地

    版权声明:本文为CSDN博主「bamboozjy」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/bamboo ...

  8. 坑:Android从相册中选择图片加载到ImageView中显示不出

  9. python爬虫下载模块_python爬虫系列(4.5-使用urllib模块方式下载图片)

    一.回顾urllib包中下载图片的方式 1.urlretrieve下载文件 from urllib import request if __name__ == "__main__" ...

最新文章

  1. 实战:基于OpenCV进行长时间曝光(内含彩蛋)
  2. 将多个文件的属性添加到数据库
  3. Kubernetes — 调度系统
  4. VTK:模型之ExtractLargestIsosurface
  5. CodeForces - 1300D Aerodynamic(几何+思维)
  6. 计算机体系结构-- 第一章4--计算机体系结构
  7. 第1章 计算机系统漫游(深入理解计算机系统)
  8. 向前看:联想未来可期
  9. 格力分红55亿,董明珠能拿多少?
  10. Ivor Horton's Beginning Visual C++ 2010
  11. Unity Realistic FPS插件 Ironsights脚本简化
  12. Ubuntu编译内核树
  13. 执行service iptables status时报错
  14. YOLOv5 Detect 参数说明
  15. Elasticsearch7.x配置xpack实战
  16. 计算机二级考试软件 免费
  17. Excel保护密码破解 打开密码和只读密码等四个密码找回
  18. Java中的Supplier接口
  19. 这个开源组件太强了,仅需三步完成 SpringBoot 日志脱敏!
  20. 【PWN系列】格式化字符串在bss段上的处理

热门文章

  1. python爬取豆瓣评论,并制作成词云
  2. 计算机专业面向的职业,职业面向及职业能力要求
  3. python提取文件_Python文件读取常用方法
  4. PFM,PPM,PWM解释
  5. 网红创业潮来袭 网红经济还能红多久?
  6. 实验1 BP神经网络实验
  7. 部署hexo遇到报错ERROR Deployer not found: git的解决办法
  8. Spring个人学习笔记
  9. 实现MapX的移屏测距功能(转)
  10. 新科技革命的主要特点