说明:大部分内容都是参考别的文章,这里做整理是为了以后的编程有实用的模板,可以即需即用。
有时写 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