现在项目中基本都有这样的需求,把图片保存到本地相册

这是一个工具类代码如下:

public class ImgUtils {    /**     * 保存文件到指定路径     */    public static boolean saveImageToGallery(Context context, Bitmap bmp){        // 首先保存图片        String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "dearxy";        File appDir = new File(storePath);        if (!appDir.exists()) {            appDir.mkdir();        }        String fileName = System.currentTimeMillis() + ".jpg";        File file = new File(appDir, fileName);        try {            FileOutputStream fos = new FileOutputStream(file);            //通过io流的方式来压缩保存图片            boolean isSuccess = bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos);            fos.flush();            fos.close();            //把文件插入到系统图库            //MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);            //保存图片后发送广播通知更新数据库            Uri uri = Uri.fromFile(file);            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));            if (isSuccess) {                return true;            } else {                return false;            }        } catch (IOException e) {            e.printStackTrace();        }        return false;    }}

Android 6.0的手机需要先申请权限,拿到权限后再保存,否则会失败
添加依赖

compile ‘pub.devrel:easypermissions:0.3.0’

实现EasyPermissions.PermissionCallbacks,重写获取权限的方法

    @OnClick(R.id.save)    public void save() {        requestPermission();    }    /**     * 请求读取sd卡的权限     */    private void requestPermission() {        if (Build.VERSION.SDK_INT >= 23) {            //读取sd卡的权限            String[] mPermissionList = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};            if (EasyPermissions.hasPermissions(getApplicationContext(), mPermissionList)) {                //已经同意过                saveImage();            } else {                //未同意过,或者说是拒绝了,再次申请权限                EasyPermissions.requestPermissions(                        this,  //上下文                        "保存图片需要读取sd卡的权限", //提示文言                        REQUEST_CODE_SAVE_IMG, //请求码                        mPermissionList //权限列表                );            }        } else {            saveImage();        }    }    /**     * 保存图片     */    private void saveImage() {        System.out.println(" 6666 ");        System.out.println(current + " current ");        final String urls = imagesUrl.get(current);        System.out.println(urls + " url ");        System.out.println(" 8888 ");//        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.fj);        new Thread(new Runnable() {            Bitmap bitmap = null;            @Override            public void run() {                URL url = null;                try {                    url = new URL("http://test.zuihou99.com" + urls);                    InputStream is = null;                    BufferedInputStream bis = null;                    try {                        is = url.openConnection().getInputStream();                        bis = new BufferedInputStream(is);                        bitmap = BitmapFactory.decodeStream(bis);                        boolean isSaveSuccess = ImgUtils.saveImageToGallery(getApplicationContext(), bitmap);                        if (isSaveSuccess) {                            Looper.prepare();                            Toast.makeText(getApplicationContext(), "保存图片成功", Toast.LENGTH_SHORT).show();                            Looper.loop();                        } else {                            Looper.prepare();                            Toast.makeText(getApplicationContext(), "保存图片失败,请稍后重试", Toast.LENGTH_SHORT).show();                            Looper.loop();                        }                    } catch (IOException e) {                        e.printStackTrace();                    }                } catch (MalformedURLException e) {                    e.printStackTrace();                }            }        }).start();    }    /**     * 根据图片的url路径获得Bitmap对象     *     * @param url     * @return     */    private Bitmap decodeUriAsBitmapFromNet(String url) {        URL fileUrl = null;        Bitmap bitmap = null;        try {            fileUrl = new URL(url);        } catch (MalformedURLException e) {            e.printStackTrace();        }        try {            HttpURLConnection conn = (HttpURLConnection) fileUrl                    .openConnection();            conn.setDoInput(true);            conn.connect();            InputStream is = conn.getInputStream();            bitmap = BitmapFactory.decodeStream(is);            is.close();        } catch (IOException e) {            e.printStackTrace();        }        return bitmap;    }    //授权结果,分发下去    @Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        // Forward results to EasyPermissions        //跳转到onPermissionsGranted或者onPermissionsDenied去回调授权结果        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);    }    //同意授权    @Override    public void onPermissionsGranted(int requestCode, List list) {        saveImage();    }    //拒绝授权    @Override    public void onPermissionsDenied(int requestCode, List perms) {        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {            //打开系统设置,手动授权            new AppSettingsDialog.Builder(this).build().show();        }    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {            //拒绝授权后,从系统设置了授权后,返回APP进行相应的操作            saveImage();        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // TODO: add setContentView(...) invocation        ButterKnife.bind(this);    }

这样就可以了,有不对的欢迎指出

这里附上源码http://download.csdn.net/download/qq_23668969/10042303

更多相关文章

  1. Android(安卓)6.0运行时权限解决方案
  2. Android多点触摸缩放图片-android学习之旅(四)
  3. Widget动态换背景图片 android
  4. Android(安卓)权限列表permission说明
  5. android 得到唯一码和电话号码
  6. Android(安卓)TextView设置图片技巧
  7. Android(安卓)动态获取创建与删除文件权限
  8. Android实用编程技巧代码总结
  9. android 开启关闭wifi服务

随机推荐

  1. Android分享功能
  2. Android应用程序消息处理机制
  3. Android内存机制分析2——分析APP内存使
  4. android资源
  5. Android中的AsyncTask和Handler应用实例
  6. Android基础之Android的系统体系结构
  7. Android横竖屏切换总结(Android资料)
  8. 【android】布局之盒模型、对齐方式、填
  9. Android(安卓)定时任务的多种实现方式
  10. 如何在Android移植使用最新的ffmpeg