android6.0下载文件路径设置

最近有很多朋友问我,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;@Overrideprotected 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. Android(安卓)APP与媒体存储服务的交互
  2. Android(安卓)SVG和Lottie库播放动画(Json)
  3. android 播放器解析MP3文件乱码分析
  4. android-XML解析Dom,Sax,Pull
  5. Android(安卓)AOP 之 javassist 示例
  6. Android(安卓)Eclipse中查看 Android框架源码
  7. Google Maps Android(安卓)API V2的使用及问题解决
  8. Android中的style和theme
  9. android 4.2.2提示 unauthorized终极解决办法,很粗暴

随机推荐

  1. Android中获得当前日期时间
  2. 按键,触摸屏流程分析
  3. Android利用soap WSDL与Webservice通信
  4. android 获取状态栏高度
  5. 在Android中调用图片、视频、音频、录音
  6. Android Retrofit2.0 上传单张图片和多张
  7. uses-permission android:name="android.
  8. Android(安卓)Notes 之 Tween动画 (2)自定
  9. Android判断设备是手机还是平板
  10. android时间对话框的核心代码