原文:http://blog.csdn.net/jasper_success/article/details/7984065

第一步:使用java.net的URLConnection对象来创建连接

第二步:通过InputStream将下载的文件写入存储卡内缓存

第三步:下载完毕之后,通过自定义的openFile()方法打开文件,判断文件类型,若为APK,开始安装

第四步:准备离开Installer程序的同时,通过自制的delFile()方法,删除缓存内文件

/** * 远程下载安装Android程序 *  * @ClassName InstallOnlineActivity * @author Jet * @date 2012-9-14 */public class InstallOnlineActivity extends Activity {    private TextView mTextView;    private EditText mEditText;    private Button mButton;    private String currentFilePath = "";    private String currentTempFilePath = "";    private String strURL = "";    private String fileEx = "";    private String fileName = "";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.installonline);        mTextView = (TextView) findViewById(R.id.installonline_text1);        mEditText = (EditText) findViewById(R.id.installonline_edittext1);        mButton = (Button) findViewById(R.id.installonline_button1);        mButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // 将文件下载到本地                mTextView.setText("下载中...");                strURL = mEditText.getText().toString();                // 截取文件后缀                fileEx = strURL.substring(strURL.lastIndexOf('.') + 1,                        strURL.length()).toLowerCase();                // 截取文件名                fileName = strURL.substring(strURL.lastIndexOf('/') + 1,                        strURL.lastIndexOf('.'));                getFile(strURL);            }        });    }    private void getFile(final String strPath) {        if (currentFilePath.equals(strPath)) {            getDataSource(strPath);        }        currentFilePath = strPath;        Runnable r = new Runnable() {            @Override            public void run() {                getDataSource(strPath);            }        };        new Thread(r).start();    }    private void getDataSource(String url) {        if (!URLUtil.isNetworkUrl(url)) {            mTextView.setText("请填写正确的URL");        } else {            try {                URL myUrl = new URL(url);                // 取得连接                URLConnection conn = myUrl.openConnection();                // 连接                conn.connect();                // 获得输入流                InputStream is = conn.getInputStream();                if (is == null) {                    throw new RuntimeException("stream is null");                }                // 创建临时文件                File myTempFile = File.createTempFile(fileName, "." + fileEx);                // 取得临时文件存放路径                currentTempFilePath = myTempFile.getAbsolutePath();                FileOutputStream fos = new FileOutputStream(myTempFile);                byte[] buf = new byte[128];                do {                    // 返回现在所读缓冲区的大小                    int numread = is.read(buf);                    if (numread <= 0) {                        break;                    }                    fos.write(buf, 0, numread);                } while (true);                // 打开文件进行安装                openFile(myTempFile);                is.close();            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }        }    }    private void openFile(File file) {        Intent intent = new Intent();        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        intent.setAction(android.content.Intent.ACTION_VIEW);        String type = getMimeType(file);        intent.setDataAndType(Uri.fromFile(file), type);        startActivity(intent);    }    private String getMimeType(File file) {        String type = "";        String fname = file.getName();        // 获得扩展名        String end = fname                .substring(fname.lastIndexOf('.') + 1, fname.length())                .toLowerCase();        // 按扩展名的类型决定MimeType        if ("m4a".equals(end) || "mp3".equals(end) || "mid".equals(end)                || "xmf".equals(end) || "ogg".equals(end) || "wav".equals(end)) {            type = "audio";        } else if ("3gp".equals(end) || "mp4".equals(end)) {            type = "video";        } else if ("jpg".equals(end) || "gif".equals(end) || "png".equals(end)                || "jpeg".equals(end) || "bmp".equals(end)) {            type = "image";        } else if ("apk".equals(end)) {            type = "application/vnd.android.package-archive";        } else {            type = "*";        }        if ("apk".equals(end)) {        } else {            type += "/*";        }        return type;    }    private void delFile(String fileName){        File file = new File(fileName);        if(file.exists()){            file.delete();        }    }    @Override    protected void onPause() {        mTextView = (TextView) findViewById(R.id.installonline_text1);        mTextView.setText("下载成功");        super.onPause();    }    @Override    protected void onResume() {        //删除临时文件        delFile(currentTempFilePath);        super.onResume();    }}

更多相关文章

  1. GradientDrawable动态改变Shape文件
  2. android_studio连接夜神模拟器
  3. android 换肤
  4. Android(安卓)ART dex2oat 浅析
  5. Android(安卓)重新编译资源文件
  6. android studio使用svn时忽略文件列表
  7. Android(安卓)详解build.gradle文件
  8. Android(安卓)GreenDao 3.0使用实例讲解
  9. Android系统定制之源码完美下载

随机推荐

  1. Android任务和返回栈完全解析
  2. Android(安卓)下使用tcpdump 抓包工具
  3. 30 个 Android(安卓)库推荐
  4. android练习:碰撞的小球
  5. 初学Android,手势缩放图片(四十八)
  6. Android异步加载
  7. android 图片加载
  8. android入门小Demo
  9. Okhttp post 发送空的body
  10. 浅谈android add_service PERMISSION DEN