我们的安卓现在有很多网络框架,可以手动配置缓存到sd卡和路径,不过我们要是手动的写入sd卡应该怎么做?自己无聊做了一个小demo,从网络读取图片,再把图片保存到sd卡。
思路:首先添加权限:网络权限和sd卡写的权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后获得网络图片的url,获得此url的输入流,在用图片工厂转成转为bitmap,最后把此bitmap压缩存入sd卡即可
//保存图片到sd卡 private void saveBitmap(Bitmap bitmap) { Log.d("0000", "saveBitmap: 0000000000"); String picPath= Environment.getExternalStorageDirectory()+"/food1.jpg"; File file = new File(picPath); //不存在就创建 if(!file.exists()){ try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } Log.d("0000", "saveBitmap: 0000000000"); FileOutputStream fos; try { fos = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); Log.d("0000", "saveBitmap: 0000000000"); } catch (Exception e) { e.printStackTrace(); } Log.d("0000", "saveBitmap:111111111111"); } //网络获取图片方法 public void getHttpBitmap(String path){ new AsyncTask<String,Void,Bitmap>(){ @Override protected Bitmap doInBackground(String... strings) { Bitmap bitmap=null; try { URL url=new URL(strings[0]); InputStream is = url.openStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (Exception e) { e.printStackTrace(); } return bitmap; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if(bitmap!=null){ iv_content.setImageBitmap(bitmap); //保存 saveBitmap(bitmap); } } }.execute(path); }
必须异步请求图片。