2

以下是我的代码,

从活动课

Intent intent = new Intent(this, DownloadService.class);
        // Create a new Messenger for the communication back
        Messenger messenger = new Messenger(handler);
        intent.putExtra("MESSENGER", messenger);
        intent.setData(Uri.parse("http://www.abc.ezy.asia/E-MobApps/op.apk"));
        intent.putExtra("urlpath", "http://www.abc.ezy.asia/E-MobApps/op.apk");
        startService(intent);

我已经覆盖了服务类方法 onHandle 事件

 // DownloadService Class
 @Override
    protected void onHandleIntent(Intent intent) {
        Uri data = intent.getData();
        String urlPath = intent.getStringExtra("urlpath");
        String fileName = data.getLastPathSegment();
        File output = new File(Environment.getExternalStorageDirectory(),fileName);
        if (output.exists()) {
            output.delete();
        }
        InputStream stream = null;
        FileOutputStream fos = null;
        try {
            URL url = new URL(urlPath);
            stream = url.openConnection().getInputStream();
            fos = new FileOutputStream(output.getPath());
            byte dataB[] = new byte[1024];
            InputStreamReader reader = new InputStreamReader(stream);
            int next = -1;
            while ((next = reader.read()) != -1) {
                fos.write(next);
            }
            fos.flush();
            result = Activity.RESULT_OK;

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (stream != null) {
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        Bundle extras = intent.getExtras();
        if (extras != null) {
            Messenger messenger = (Messenger) extras.get("MESSENGER");
            Message msg = Message.obtain();
            msg.arg1 = result;
            msg.obj = output.getAbsolutePath();
            try {
                messenger.send(msg);
            } catch (android.os.RemoteException e1) {
                Log.w(getClass().getName(), "Exception sending message", e1);
            }

        }
    }
} 

在上面的代码中,当我尝试下载 html 文件时,我使用文件流和输入流阅读器进行下载,然后将完整的文件下载到我的 sdcard。但是当我尝试 APK 时。下载的文件是 2.2 mb 而不是 2.4 mb 存在解析问题。请帮助我解决问题。

4

1 回答 1

1

试试这段代码:

                URL url = new URL(fileUrl);
                URLConnection connection = url.openConnection();
                connection.connect();
                int fileLength = connection.getContentLength();
                InputStream input = new BufferedInputStream(url.openStream());                  
                OutputStream output = new FileOutputStream(output.getPath());
                byte data[] = new byte[1024];
                int count;
                while ((count = input.read(data)) != -1) {
                    output.write(data, 0, count);
                }
                output.flush();
                input.close();
                result = Activity.RESULT_OK;    
于 2013-07-25T11:52:53.477 回答