說明:大部分內容都是參考別的文章,這裏做整理是爲了以後的編程有實用的模板,可以即需即用。
有時寫 Demo 需要從網絡下載資源,直接 copy,省時省力…
new Thread(new Runnable() {
@Override
public void run() {
downloadFile("sound", "ring.mp3", "https://www.xxx.com/ring.mp3");
}
}).start();
/**
* 下載指定路徑的文件,並寫入到指定的位置
*
* @return 返回0表示下載成功,返回1表示下載出錯
*/
public int downloadFile(String dirName, String fileName, String urlStr) {
OutputStream output = null;
try {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
//定義請求時間,在ANDROID中最好是不好超過10秒。否則將被系統回收。
conn.setConnectTimeout(6 * 1000);
//請求成功之後,服務器會返回一個響應碼。如果是GET方式請求,服務器返回的響應碼是200,post請求服務器返回的響應碼是206(貌似)。
if (conn.getResponseCode() == 200) {
File file = createFile(dirName, fileName);
InputStream input = conn.getInputStream();
output = new FileOutputStream(file);
byte buffer[] = new byte[4 * 1024];//每次存4K
int temp;
//寫入數據
while ((temp = input.read(buffer)) != -1) {
output.write(buffer, 0, temp);
}
// TODO: file.getAbsolutePath()爲文件路徑
}
output.flush();
output.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
output.close();
System.out.println("success");
return 0;
} catch (IOException e) {
System.out.println("fail");
e.printStackTrace();
}
}
return 1;
}
動態獲取權限的代碼:
String[] permissions = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
List<String> mPermissionList = new ArrayList<>();
private static final int PERMISSION_REQUEST = 1;
private void checkPermission() {
mPermissionList.clear();
//判斷哪些權限未授予
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);
}
}
// 判斷是否爲空
if (mPermissionList.isEmpty()) {//未授予的權限爲空,表示都授予了
} else {//請求權限方法
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//將List轉爲數組
ActivityCompat.requestPermissions(MainActivity.this, permissions, PERMISSION_REQUEST);
}
}
/**
* 響應授權
* 這裏不管用戶是否拒絕,都進入首頁,不再重複申請權限
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case PERMISSION_REQUEST:
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
break;
}
}
參考文章:
1、https://bbs.csdn.net/topics/390792220
2、https://blog.csdn.net/jianesrq0724/article/details/77100942