一个下载的操作如何更新进度条有代码
类似于安卓市场或机锋这样的 有个安装的按钮 然后有个进度条 当触发这个按钮后就会有进度条更新 这个我不知道如何去做了 请教一下大家 看代码
继承的BaseAdapter不多说
public class GamesInfoListAdapter extends BaseAdapter{................} @Override public View getView(final int index, View convertView, ViewGroup parent) { Log.d("ccf", "getView"+index); final GridHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.gridview_item, null); holder = new GridHolder(); holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage_logo); holder.appName = (TextView)convertView.findViewById(R.id.itemText_name); holder.appNet = (TextView)convertView.findViewById(R.id.itemText_type_name); holder.btns = (ImageButton)convertView.findViewById(R.id.btns); holder.size = (TextView)convertView.findViewById(R.id.tv_game_size); holder.pro = (ProgressBar) convertView.findViewById(R.id.progressBar1); holder.textView = (TextView) convertView.findViewById(R.id.tv_size); holder.ratingBarScore = (RatingBar)convertView.findViewById(R.id.ratingBar_score); convertView.setTag(holder); }else{ holder = (GridHolder) convertView.getTag(); } GameInfo info = null; info = list.get(index); if (info != null) { if(info.getLogo_url() != null){ //如果取得到图片就用取到的网络图片,不然就用默认 Log.d("ccf", info.getLogo_url().substring(21)); holder.appImage.setImageBitmap(info.getDownloadBitmap()); } holder.appName.setText(info.getName()); holder.appNet.setText(info.getTypeName()); holder.size.setText(info.getSize()); holder.ratingBarScore.setRating(Float.parseFloat(info.getSourceScore()));//评分 暂时注销掉 holder.btns.setTag(info.getDownLoadFileUrl()); final String gameName; gameName = info.getName(); holder.btns .setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { //触发下载操作 if (flag == 0){//判断点击标记 holder.ratingBarScore.setVisibility(View.GONE); holder.pro.setVisibility(View.VISIBLE); holder.textView.setVisibility(View.VISIBLE); if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ }else {// Toast.makeText(this, "没有SD卡", 1000).show(); Log.v("wjp", "7889900"); } final String downloadUrl =(String)v.getTag(); Thread thread = new Thread(){ int count = 0; public void run(){ Log.v("ccf", "onClick"); try { WebHelper.downLoadFile(context, downloadUrl, gameName); WebHelper.openFile(context, new File("/sdcard/9twan/"+ gameName +".apk")); if(!WebHelper.REGISTER_FLAG){ Log.v("GamesInfoListAdapter", "WebHelper.REGISTER_FLAG == false"); String imei, mac, mobile_number, model, brand; boolean flag; TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); imei = tm.getDeviceId(); if(imei == null){ imei = "CUSTOM" + WebHelper.generateRandomIMEIString(15); } mac = null;// mac = tm.getDeviceId(); //这个自己写个取WIFI的方法 if(mac == null){ mac = "CUSTOM" + WebHelper.generateRandomMacString(17); } mobile_number = tm.getLine1Number(); model = tm.getLine1Number(); brand = tm.getLine1Number(); flag = WebHelper.regDevice(context, "install", imei, mac, mobile_number, model, brand); if(flag){ WebHelper.REGISTER_FLAG = true; Log.v("GamesInfoListAdapter", "WebHelper.REGISTER_FLAG == true"); } } }catch (Exception e){ e.printStackTrace(); } } }; Log.v("wjp", "正在运行"+thread.getName()); thread.start(); Toast.makeText(context, "开始下载" + gameName, 0).show(); holder.btns.setBackgroundResource(R.drawable.tab_out); flag =1; }else {// Thread.interrupted();//暂停 返回boolean// Thread.sleep(3000); holder.btns.setBackgroundResource(R.drawable.tab_install); flag =0; } } }); } return convertView; }
protected File downLoadFile(String httpUrl) { // TODO Auto-generated method stub final String fileName = "updata.apk"; File tmpFile = new File("//sdcard//update"); if (!tmpFile.exists()) { tmpFile.mkdir(); } final File file = new File("//sdcard//update//" + fileName); try { URL url = new URL(httpUrl); try { HttpURLConnection conn = (HttpURLConnection) url .openConnection(); InputStream is = conn.getInputStream();// FileLength = conn.getContentLength();//根据响应得到大小// Log.v("wjp","FileLength"+FileLength );// if(FileLength <=0)throw new RuntimeException("无法获取文件的大小");//获取文件大小// Log.v("wjp","FileLengsss"+FileLength ); if(is == null)throw new RuntimeException("stream is null");//null FileOutputStream fos = new FileOutputStream(file); byte[] buf = new byte[1024];// conn.connect(); double count = 0; if (conn.getResponseCode() >= 400) { Toast.makeText(context, "出错", Toast.LENGTH_SHORT) .show(); } else { while (count <= 100) { if (is != null) { int numRead = is.read(buf); if (numRead <=0) { break; } else { fos.write(buf, 0, numRead);// count +=numRead; // sendMsg(1); } } else { break; } } } conn.disconnect(); fos.close(); is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return file;}