用URL在IntentService中下载图片并更新到ImageView
整个流程还是采用的之前的逻辑,即在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相关推荐
- Java代码服务器上下载图片_Java如何从服务器中下载图片
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net ...
- 利用jsoup 如何从网页中下载图片
来自:http://www.open-open.com/bbs/view/1320576549952 如何从网页中下载图片 如果做为爬虫很有必要从网页中下载图片到本地,那么我们利用jsoup来进行该操 ...
- 如何从网页中下载图片
如果做为爬虫很有必要从网页中下载图片到本地,那么我们利用jsoup来进行该操作,jsoup 是一个很不错的html解析器. 网页中下载图片需要这么两步操作 1.获取绝对路径 很多网页中用的是相对路径, ...
- Kotlin学习——简单运用协程网络下载图片并更新到UI
kotlin学习 协程Coroutines学习 简单小Demo:通过协程下载一张网络图片并显示出来 文章目录 kotlin学习 前言 一.如何开启一个协程? 二.如何在项目中使用协程 增加对 Kotl ...
- 在 C# 中下载图片
使用 C# 中 WebClient 类下载图片 使用 C# 中的 Bitmap 类在不知道格式的情况下下载图片 使用 C# 中的Image.FromStream() 函数下载不知道格式的图片 1.使用 ...
- 如何从源代码中下载图片
步骤: 以网易上的这张图为例 第一步:右击这张图在网易的所在位置 第二步:[检查] 第三步:在css样式中找到此图片所在的网址 第四步:右击此图片所在的网址 第五步:[Open in new tab] ...
- vue中下载图片到本地
版权声明:本文为CSDN博主「bamboozjy」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/bamboo ...
- 坑:Android从相册中选择图片加载到ImageView中显示不出
- python爬虫下载模块_python爬虫系列(4.5-使用urllib模块方式下载图片)
一.回顾urllib包中下载图片的方式 1.urlretrieve下载文件 from urllib import request if __name__ == "__main__" ...
最新文章
- 实战:基于OpenCV进行长时间曝光(内含彩蛋)
- 将多个文件的属性添加到数据库
- Kubernetes — 调度系统
- VTK:模型之ExtractLargestIsosurface
- CodeForces - 1300D Aerodynamic(几何+思维)
- 计算机体系结构-- 第一章4--计算机体系结构
- 第1章 计算机系统漫游(深入理解计算机系统)
- 向前看:联想未来可期
- 格力分红55亿,董明珠能拿多少?
- Ivor Horton's Beginning Visual C++ 2010
- Unity Realistic FPS插件 Ironsights脚本简化
- Ubuntu编译内核树
- 执行service iptables status时报错
- YOLOv5 Detect 参数说明
- Elasticsearch7.x配置xpack实战
- 计算机二级考试软件 免费
- Excel保护密码破解 打开密码和只读密码等四个密码找回
- Java中的Supplier接口
- 这个开源组件太强了,仅需三步完成 SpringBoot 日志脱敏!
- 【PWN系列】格式化字符串在bss段上的处理