从服务端(PC)下载apk,显示进度

服务端:

importjava.io.BufferedInputStream;

importjava.io.DataInputStream;

importjava.io.DataOutputStream;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

importjava.net.ServerSocket;

importjava.net.Socket;

publicclass Main {

   publicstatic String path="E:\\project\\guaizhuo\\apk\\FlingGallery.apk";

   publicstaticvoidmain(String[] args){

      boolean cancel=false;

      try {

         ServerSocket socket=new ServerSocket(6502);

         Socketclient=socket.accept();

         InputStreamis=client.getInputStream();

         ObjectInputStreamois=new ObjectInputStream(is);

         DataOutputStream ps= new DataOutputStream(client.getOutputStream());

         File file=new File(path);

         String filename=file.getName();

         long fileLen=file.length();

         System.out.println(fileLen);/

         ps.writeLong(fileLen);

         int len=1024*5;//缓存大小

         byte[] buf=newbyte[len];

         int read=0;

         DataInputStream fis= new DataInputStream(new BufferedInputStream(new FileInputStream(path)));

         while(!cancel){

            if(fis!=null){

                if((read=fis.read(buf))!=-1){

                   ps.write(buf,0,read);

                   ps.flush();

                   cancel=ois.readBoolean();

                }else{

                   break;

                }

            }else{

                System.out.println("文件获取失败");/

                break;

            }

         }

         System.out.println("server文件下载结束");/

         ps.close();

         socket.close();

         socket=null;

         fis.close();

         fis=null;

         buf=null;              

      } catch (IOException e) {

         e.printStackTrace();

      }

   }

}

 

客户端:

importjava.io.BufferedInputStream;

import java.io.BufferedOutputStream;

importjava.io.DataInputStream;

import java.io.DataOutputStream;

importjava.io.File;

importjava.io.FileOutputStream;

importjava.io.IOException;

import java.io.InputStream;

import java.io.ObjectInputStream;

importjava.io.ObjectOutputStream;

importjava.io.OutputStream;

importjava.net.InetSocketAddress;

importjava.net.Socket;

 

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.net.Uri;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

 

publicclass DownLoadApp_TestActivity extends Activityimplements OnClickListener{

   String path="/sdcard/guaizhuo/download/test.apk";

   longlength=0;

   File file;

   booleancancel=false;

    @Override

    publicvoid onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

       setContentView(R.layout.main);

        Buttonbtn=(Button)findViewById(R.id.button);

       btn.setOnClickListener(this);

        Buttonstop=(Button)findViewById(R.id.stop);

       stop.setOnClickListener(newView.OnClickListener() {

         publicvoid onClick(View arg0) {

            cancel=true;

         }

      });

    }

   publicvoid onClick(View v) {

      new Thread(){

         publicvoid run(){

            try{

                Socketsocket=new Socket();

                socket.connect(new InetSocketAddress("192.168.1.102",6502),2000);

                OutputStreamo=socket.getOutputStream();

                ObjectOutputStreamoos=new ObjectOutputStream(o);

                DataInputStreamis =new DataInputStream(newBufferedInputStream(socket.getInputStream()));

                long length= is.readLong();//文件长度

                int rate = 0; 

                int pass=0;

                file=new File(path);

                file.createNewFile();

                int len=1024*5;

                byte[] buf=newbyte[len];//缓冲区

                OutputStreamos=new FileOutputStream(file);

                int read=0;

                 while(true){

                    if(length-pass<len){len=(int)length-pass;}

                    if((read=is.read(buf))==-1){

                       break;

                    }else{

                       os.write(buf,0,read);

                       os.flush();

                       pass+=read;

                       rate=(int)(((float)pass/length)*100);

                       if(rate==100){break;}

                    }

                    if(rate<100){

                       oos.writeBoolean(cancel);

                       oos.flush();

                    }

                    if(rate==100){

                       cancel=true;

                       oos.writeBoolean(cancel);

                       oos.flush();

                    }

                 }

                   is.close();

                   socket.close();

                   socket=null;

                   Intentintent = new Intent();

                   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                   intent.setAction(android.content.Intent.ACTION_VIEW);

                   intent.setDataAndType(Uri.fromFile(file),

                   "application/vnd.android.package-archive");

                   startActivity(intent);

            }catch(IOException e){

                System.out.println("erroron connect");///

                System.out.println(e);///

            }

         }

      }.start();

   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值