編輯:關於Android編程
在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布局文件
自繪制Android界面核心類圖。入門Android時,會看到過一張系統架構圖,從那張圖可以知道Android系統自上到下被劃分了幾個層次(具體每個層次的職責定義不再概述
NumberPickerViewanother NumberPicker with more flexible attributes on Android platfor
本文實例講述了Android實現軟件列表的點擊啟動另外一個程序功能。分享給大家供大家參考,具體如下:目前面世的許多軟件中有這麼一個功能:設備中安裝了哪些軟件,他們會以一個
三星Galaxy S6 Edge推出有一段時間了,受很多用戶的贊揚,不過再好的手機在使用的過程中也會出現一定的問題。比如數據連接問題,手機卡頓滯後問題,攝像