zoukankan      html  css  js  c++  java
  • 下载相关的简单实例

    Main.java

    package src.com;

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.URL;
    import java.net.URLConnection;

    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.webkit.URLUtil;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    public class Main extends Activity {

    private TextView mTextView01;
    private EditText mEditText01;
    private Button mButton01;
    private static final String TAG = "DOWNLOADAPK";
    private String currentFilePath = "";
    private String currentTempFilePath = "";
    private String strURL = "";
    private String fileEx = "";
    private String fileNa = "";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mTextView01 = (TextView) findViewById(R.id.myTextView1);
    mButton01 = (Button) findViewById(R.id.myButton1);
    mEditText01 = (EditText) findViewById(R.id.myEditText1);

    mButton01.setOnClickListener(new Button.OnClickListener(){

    @Override
    public void onClick(View v) {
    /* 文件会下载至local端 */
    mTextView01.setText("下载中...");
    strURL = mEditText01.getText().toString();
    /*取得欲安装程序的文件名称*/
    fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length()).toLowerCase();
    fileNa = strURL.substring(strURL.lastIndexOf("/") + 1, strURL.lastIndexOf("."));
    getFile(strURL);
    }

    });

    mEditText01.setOnClickListener(new EditText.OnClickListener(){

    @Override
    public void onClick(View v) {
    mEditText01.setText("");
    mEditText01.setText("远程安装程序(请输入URL)");
    }

    });
    }

    /* 处理下载URL文件自定义函数 */
    private void getFile(final String strPath){
    try{
    if( strPath.equals(currentFilePath) ){
    getDataSource(strPath);
    }
    currentFilePath = strPath;
    Runnable r = new Runnable(){

    @Override
    public void run() {
    try{
    getDataSource(strPath);
    }catch(Exception e){
    Log.e(TAG, e.getMessage(), e);
    }
    }

    };
    }catch(Exception e){
    e.printStackTrace();
    }
    }

    /* 取得远程文件 */
    private void getDataSource(String strPath) throws Exception{
    if( !URLUtil.isNetworkUrl(strPath) ){
    mTextView01.setText("错误的URL");
    }else{
    /* 取得URL */
    URL myURL = new URL(strPath);
    /* 创建连接 */
    URLConnection conn = myURL.openConnection();
    conn.connect();
    /* InputStream 下载文件 */
    InputStream is = conn.getInputStream();
    if( is == null ){
    throw new RuntimeException("stream is null");
    }
    /* 创建临时文件 */
    File myTempFile = File.createTempFile(fileNa, "."+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);
    try{
    is.close();
    }catch(Exception ex){
    Log.e(TAG, "error: " + ex.getMessage(), ex);
    }
    }
    }

    private void openFile(File f) {
    Intent intent = new Intent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    /* 调用getMIMEType()来取得MimeType */
    String type = getMimeType(f);
    /* 设置intent的file与MimeType */
    intent.setDataAndType(Uri.fromFile(f), type);
    startActivity(intent);
    }

    private String getMimeType(File f) {
    String type = "";
    String fName = f.getName();
    /* 取得扩展名 */
    String end = fName.substring(fName.lastIndexOf(".")+1,fName.length()).toLowerCase();

    /* 依扩展名的类型决定MimeType */
    if( end.equals("m4a") || end.equals("mp3") || end.equals("mid") || end.equals("xmf")
    || end.equals("ogg") || end.equals("wav") ){
    type = "audio";
    }else if( end.equals("3gp") || end.equals("mp4") ){
    type = "video";
    }else if( end.equals("jpg") || end.equals("gif") || end.equals("png") ||
    end.equals("jpeg") || end.equals("bmp") ){
    type = "image";
    }else if( end.equals("apk") ){
    type = "application/vnd.android.package-archive";
    }else{
    type = "";
    }

    /* 如果无法直接打开,就跳出软件列表给用户选择 */
    if( end.equals("apk") ){

    }else{
    type += "/*";
    }
    return type;
    }

    /* 自定义删除文件方法 */
    private void delFile(String strFileName){
    File myFile = new File(strFileName);
    if( myFile.exists() ){
    myFile.delete();
    }
    }

    /* 当Activity处于onPause状态时,更改TextView文字状态 */
    protected void onPause(){
    mTextView01 = (TextView) findViewById(R.id.myTextView1);
    mTextView01.setText("下载成功");
    super.onPause();
    }

    /* 当Activity处于onResume状态时,删除临时文件 */
    protected void onResume(){
    /*删除临时文件*/
    delFile(currentTempFilePath);
    super.onResume();
    }
    }

    download Manifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="src.com"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <application
    android:icon="@drawable/icon"
    android:label="@string/app_name" >
    <activity
    android:name=".Main"
    android:label="@string/app_name" >
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>"

    </manifest>

    layout目录下的main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:id="@+id/widget27" >

    <TextView
    android:id="@+id/myTextView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/str_text" />
    <EditText
    android:id="@+id/myEditText1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/str_url"
    android:textSize="18sp" />
    <Button
    android:id="@+id/myButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/str_button" />

    </LinearLayout>

    values目录下的xml

    strings.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>

    <string name="str_button">开始安装</string>
    <string name="str_text">远程安装程序(请输入URL)</string>
    <string name="str_url">http://127.0.0.1:8080/android/hello.apk</string>
    <string name="app_name">远程下载安装程序</string>

    </resources>

    color.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <drawable name="darkgray">#808080</drawable>
    <drawable name="white">#FFFFFF</drawable>
    <drawable name="blue">#0000FF</drawable>
    </resources>

  • 相关阅读:
    链表逆序输出 ---九度1511
    java 通过ssh连接linux服务器的测试代码
    C/C++时间函数总结
    C,C++,windows api, linux api 操作文件总结
    基于大数据计算思想的分布式数据库
    手机定位的方式
    矩阵取数问题
    回文字符串
    linux shell重定向总结
    apache flink 入门
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2417465.html
Copyright © 2011-2022 走看看