android6.0下载路径设置
16lz
2021-01-24
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布局文件
更多相关文章
- Android(安卓)APP与媒体存储服务的交互
- Android(安卓)SVG和Lottie库播放动画(Json)
- android 播放器解析MP3文件乱码分析
- android-XML解析Dom,Sax,Pull
- Android(安卓)AOP 之 javassist 示例
- Android(安卓)Eclipse中查看 Android框架源码
- Google Maps Android(安卓)API V2的使用及问题解决
- Android中的style和theme
- android 4.2.2提示 unauthorized终极解决办法,很粗暴