Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android6.0下載路徑設置

android6.0下載路徑設置

編輯:關於Android編程

最近有很多朋友問我,android6.0下載文件怎樣設置文件的保存路徑。今天就把android6.0下載文件路徑設置總結一下。

在android 6.0以前,你可以只關注外置存儲是否掛載即可,並且可以直接在sdcard目錄下創建“xxx”文件夾保存下載的文件(例如下載一張圖片a.jpg到sdcar“xxx”文件夾下,我們只需要在清單文件中配置對sdcard讀寫權限,就可以設置下載路徑“mnt/sdcard/xxx/a.jpg”)。但是從6.0以後,也就是M系統後,還需要判斷是否有讀寫權限,只有具備這些權限才可以讀寫外置存儲。並且要通過這個方法:Environment.getExternalStorageDirectory()獲取路徑:/storage/emulated/0
默認存在,聲明權限則可讀寫(6.0和以後系統還需要向用戶申請同意才可以)。
下面直接上代碼:
Java代碼:

package com.hc.android6.download;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import org.hpg.weather.download.R;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;


public class MainActivity extends ActionBarActivity {
private final int TODOWN = 1;
private static final String TAG = "hc";
private File file1;
private int contentLength;
private Handler mhandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case TODOWN:
//                設置下載進度條的進度
                if (file1.length() == contentLength) {
                    Toast.makeText(getApplicationContext(), "下載完成", Toast.LENGTH_SHORT).show();
//                        隱藏進度條
                    mprogressBar.setVisibility(View.GONE);
                } else {

                    setmprogressbar();

                }
                break;
        }
    }
};

private void setmprogressbar() {
    mprogressBar.setProgress((int) file1.length());
}

String hcUrl = "http://p1.so.qhmsg.com/t016269623a51ead026.jpg";
private Button button;
private ProgressBar mprogressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = (Button) findViewById(R.id.download);
    mprogressBar = (ProgressBar) findViewById(R.id.progressBar);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    download();
                }
            }).start();
        }
    });
}


//下載
private void download() {
    Message message = new Message();
    message.what = TODOWN;
    try {
        URL url = new URL(hcUrl);
        //打開連接
        URLConnection conn = url.openConnection();
        //打開輸入流
        InputStream is = conn.getInputStream();
        //獲得長度
        contentLength = conn.getContentLength();
        mprogressBar.setMax(contentLength);
        Log.e(TAG, "contentLength = " + contentLength);
        //創建文件夾 HC,在存儲卡下
        String dirName = Environment.getExternalStorageDirectory() + "/HC/";
        File file = new File(dirName);
        //不存在創建
        if (!file.exists()) {
            file.mkdir();
        }
        //下載後的文件名
        String fileName = dirName + "hcdown.jpg";
        file1 = new File(fileName);
        if (file1.exists()) {
            file1.delete();
        }
        //創建字節流
        byte[] bs = new byte[1024];
        int len;
        OutputStream os = new FileOutputStream(fileName);
        //寫數據
        while ((len = is.read(bs)) != -1) {
            os.write(bs, 0, len);
            mhandler.sendEmptyMessage(TODOWN);
            SystemClock.sleep(100);

        }
        //完成後關閉流
        Log.e(TAG, "download-finish");
        Log.e(TAG, file1.length() + "");
        os.close();
        is.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

xml布局文件

這裡寫圖片描述

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved