安卓Service组件使用系列3:使用IntentService下载网络图片
使用IntentService的特点:
1.不需要开启线程
2.不需要关闭服务,自己会关闭
3.使用单线程下载数据
(不需要完成线程的编写,直接访问网络就可以获取图片)
因为以上两点都在它的类源码中封装好了。
在面我们看一下它的使用方法。
整体思路:在xml文件中放置一个Button控件,在这个Button点击事件中开启Service。定义一个DownLoadService类,继承IntentService类,在这个类中重写onHandleIntent方法,在这个方法中下载网络图片。注意在清单文件AndroidManifest.xml中,声明访问网络的授权和读取sdcard卡的授权。
activity_main.xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:layout_marginTop="146dp"android:text="使用IntentService下载网络图片" /></RelativeLayout>
MainActivity.java文件:
package com.example.android_intentservice;import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;public class MainActivity extends Activity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button)findViewById(R.id.button1);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent=new Intent(MainActivity.this,DownLoadService.class);startService(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
DownLoadService.java文件:
package com.example.android_intentservice;import java.io.File;
import java.io.FileOutputStream;import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.DefaultedHttpContext;
import org.apache.http.util.EntityUtils;import android.app.IntentService;
import android.content.Intent;
import android.os.Environment;
import android.widget.Toast;
//使用IntentService的特点:
//1.不需要开启线程
//2.不需要关闭服务,自己会关闭
//3.使用单线程下载数据
//(不需要完成线程的编写,直接访问网络就可以获取图片)
//因为以上两点都在它的类源码中封装好了
public class DownLoadService extends IntentService {private final String IMAGE_PATH="https://www.baidu.com/img/bd_logo1.png";
// 默认这里要传一个参数public DownLoadService() {super("DownLoadService");// TODO Auto-generated constructor stub}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();}@Overrideprotected void onHandleIntent(Intent intent) {// TODO Auto-generated method stubHttpClient httpClient=new DefaultHttpClient();HttpPost post=new HttpPost(IMAGE_PATH);HttpResponse response=null;
// 得到sdcard的存储目录File file=Environment.getExternalStorageDirectory();FileOutputStream outputStream=null;try {response=httpClient.execute(post);if(response.getStatusLine().getStatusCode()==200){byte[] result=EntityUtils.toByteArray(response.getEntity());if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){File new_file=new File(file,"bd_logo1.png");outputStream=new FileOutputStream(new_file);outputStream.write(result,0,result.length);Toast.makeText(getApplicationContext(), "下载文件完毕!!", 1).show();}}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{try {if(outputStream!=null){outputStream.close();}} catch (Exception e2) {// TODO: handle exception}httpClient.getConnectionManager().shutdown();}}}
安卓Service组件使用系列3:使用IntentService下载网络图片相关推荐
- 安卓Service组件使用系列2:使用Service下载网络图片并存储于sdCard卡上
使用启动式Service的方式可以处理网络的数据交互.音乐播放.执行IO操作(这些操作都是来自后台的).下面我们以下载网络图片并存储于sdCard卡为实际应用背景来说明它的使用方法. 整体思路:在xm ...
- 安卓控件使用系列17:ImageView获取网络图片
安卓使用ImageView控件获取网络图片是我们在开发应用程序中常常用到的一个功能,我们来分享一下是怎么实现这一功能的. 这个例子是点击Button按钮,就会按照制定url地址找到图片的位置,并下载绑 ...
- 安卓架构组件(1)-App架构指导
相关文章: [翻译]安卓架构组件(2)-添加组件到你的项目中 [翻译]安卓架构组件(3)-处理生命周期 [翻译]安卓架构组件(4)-LiveData [翻译]安卓架构组件(5)-ViewModel [ ...
- Android Service组件实现后台音乐播放
源码在最后哦! 一.Service组件介绍 1.Service Service它可以在后台执行长时间运行操作而没有用户界面的应用组件,不依赖任何用户界面,例如后台播放音乐,后台下载文件等. 虽然服务是 ...
- 安卓Service 详解
Service全部内容基本会在本篇涉及到,我们将围绕以下主要知识点进行分析: Service简单概述 Service在清单文件中的声明 Service启动服务实现方式及其详解 Service绑定服务 ...
- 安卓Service实现通知栏音乐播放器,切换歌曲,类似QQ音乐
引言: 这样的一个音乐播放器,用到了安卓四大组件的其中三个,等于说是一个比较综合性的小功能.实现方法其实有很多,我这里给出自己的方法,不喜勿喷. 需求分析 1.音乐播放器,那我们需要一个帮助类,来构建 ...
- 【Android 进程保活】应用进程拉活 ( 系统 Service 机制拉活 | Service 组件 onStartCommand 方法分析 | 源码资源 )
文章目录 一. Service 组件 onStartCommand 方法分析 1. onStartCommand 函数返回值分析 2. onStartCommand 函数 START_STICKY_C ...
- 【Android 安全】DEX 加密 ( Application 替换 | 分析 Service 组件中调用 getApplication() 获取的 Application 是否替换成功 )
文章目录 一. Service 中的 getApplication() 方法分析 二. ActivityThread 中的 H 处理 CREATE_SERVICE 消息 三. ActivityThre ...
- 安卓四大组件之Activity
1.Activity简介 它是安卓四大组件之一,用于界面的展示,是最贴切用户的一个组件,所以说它的操作 都与用户密切相关,可以通过setContentView来显示制定控件.通常情况下,在一个安卓应用 ...
最新文章
- 读取siftgeo格式文件的matlab程序
- java的System.gc()的理解
- perl中的q,qq,qw,qr,qx
- 网站跨域访问解决方法
- linux 服务器长ping 加时间戳;转
- 华为2017年营收突破6000亿;阿里巴巴全球总经理离职;亚马逊将关闭音乐存储服务丨价值早报
- android自定义起止时间的时间刻度尺,Android 自定义View篇(六)实现时钟表盘效果...
- IDEA的Translation翻译插件失效
- 【Unity】入门学习笔记180605——游戏动画设计(4)——游戏角色动画基础
- 触及办事质量黑白、是否跟商家承诺的一致
- Lect1 String相关题目
- java如何将mp4写入光盘_iOS - 读取/写入mp4视频的XMP元数据
- quartus13波形仿真
- tensorflow高阶教程:tf.dynamic_rnn
- 数据监控预警系统,实现不同端信息推送
- Win10没有安全选项卡怎么办 安全选项卡在哪里
- 原生Transform编辑器,这个两个脚本能直接更改检视窗口的Tranform的显示
- 前端HTML弹窗的实现
- 用IDEA创建java项目并跑起来
- 系统盘(c盘)空间清理方法总结
热门文章
- 2011级-csdn-java-张侃— JavaWEB开发-国际化(一)
- 基于javaweb+jsp的企业车辆管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
- excel导入如果是数字类型的poi的cell.getStringCellValue()会报错
- 中保研碰撞测试汇总 ---更新至2020.06.10
- 菜菜的Python学习日记 | 正则表达式你必须了解的知识点
- 【EndNote】文献模板编排语法详解
- cmdline(一):cmdline是什么?cmdline怎么添加?
- tv189获取影片地址的方法
- 中国安防行业发展趋势四大看点
- 学习python好就业么