Android利用后台服务下载网络数据
2018-07-20 来源:open-open
/** * 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; } }
标签: 网络
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
最新资讯
热门推荐