欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android利用后台服务下载网络数据,android后台,/** * servic

来源: javaer 分享于  点击 41723 次 点评:233

Android利用后台服务下载网络数据,android后台,/** * servic


/** * service运行在主线程里所以不能使用HTTP协议访问网络 *  * try catch的实例尽量在该块外面定义 */public class MyService extends Service {public MyService() {// TODO Auto-generated constructor stub}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {//获得图片地址final String url=intent.getStringExtra("image_path");final Handler handler=new Handler(){@Overridepublic 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(){@Overridepublic 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(fileOutputStream!=null){try {fileOutputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//关闭该进程if(httpClient!=null){httpClient.getConnectionManager().shutdown();}}}}).start();return super.onStartCommand(intent, flags, startId);}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.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;@Overrideprotected 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(){@Overridepublic void onClick(View v) {Intent intent=new Intent(MainActivity.this,MyService.class);intent.putExtra("image_path",url);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;}}
相关栏目:

用户点评