- /**
- * service运行在主线程里所以不能使用HTTP协议访问网络
- *
- * try catch的实例尽量在该块外面定义
- */
- public class MyService extends Service {
- public MyService() {
- // TODO Auto-generated constructor stub
- }
- @Override
- public void onCreate() {
- // TODO Auto-generated method stub
- super.onCreate();
- }
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- //获得图片地址
- final String url=intent.getStringExtra("image_path");
- final Handler handler=new Handler(){
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- if(msg.what==111)
- {
- Toast.makeText(MyService.this,"下载完成", Toast.LENGTH_LONG).show();
- stopSelf();//startService()启动后,关闭service
- }
- }
- };//注意分号
- //启动线程访问网络
- new Thread(new Runnable(){
- @Override
- public void run() {
- //获得获取网络资源的Http客户端
- HttpClient httpClient=new DefaultHttpClient();
- //请求方式
- HttpPost httpPost=new HttpPost(url);
- HttpResponse httpResponse=null;
- //网络资源的字节数组
- byte[] data=null;
- //文件存储路径
- File file=new File(Environment.getExternalStorageDirectory(),"图片后台下载.jpg");
- FileOutputStream fileOutputStream=null;
- try {
- //执行请求获得响应
- httpResponse=httpClient.execute(httpPost);
- //判断响应是否成功
- if(httpResponse.getStatusLine().getStatusCode()==200)
- {
- //获得内容的字节数组
- data=EntityUtils.toByteArray(httpResponse.getEntity());
- //判断SD卡是否可用
- if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
- {
- fileOutputStream=new FileOutputStream(file);
- fileOutputStream.write(data, 0,data.length);
- //完成下载发送消息
- Message message=Message.obtain();
- message.what=111;
- handler.sendMessage(message);//向主线程发送消息
- }
- }
- } catch (ClientProtocolException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- if(fileOutputStream!=null)
- {
- try {
- fileOutputStream.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- //关闭该进程
- if(httpClient!=null)
- {
- httpClient.getConnectionManager().shutdown();
- }
- }
- }}).start();
- return super.onStartCommand(intent, flags, startId);
- }
- @Override
- public IBinder onBind(Intent intent) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public void onDestroy() {
- // TODO Auto-generated method stub
- super.onDestroy();
- }
- }
- public class MainActivity extends Activity {
- private String url="http://p16.qhimg.com/bdr/__85/d/_open360/fengjing0321/9.jpg";
- private Button btnDownload=null;
- private ImageView image=null;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- btnDownload=(Button)this.findViewById(R.id.button1);
- image=(ImageView)this.findViewById(R.id.imageView1);
- btnDownload.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- Intent intent=new Intent(MainActivity.this,MyService.class);
- intent.putExtra("image_path",url);
- startService(intent);
- }
- });
- }
- @Override
- public 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;
- }
- }
来源: http://www.phpxs.com/code/1001986/