关闭

仿网易云音乐图片保存

446人阅读 评论(0) 收藏 举报
分类:

网易云音乐,听见好声音~~~
大家好

首先说保存按钮比较丑陋,后面再更改(妹子图来自干货)

上效果图这里写图片描述

这里写图片描述

图片的保存,可以将Bitmap对象进行压缩后以流的形式写入文件,对于Bitmap的获取

Glide应该也可以拿到,在这里我们使用okhttp获取输入流的方式来获得,具体如代码

public static void getBitmapUrl(Context context, String imageUrl) {
    try {
        //提取bitmap,听说好像glide也可以获得bitmap的
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url(imageUrl).build();
        Response response = okHttpClient.newCall(request).execute();
        if (response.isSuccessful()) {
            InputStream inputStream = response.body().byteStream();
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            //将图片保存到本地
            // 首先保存图片
            //检测是否存在该文件
            int start = imageUrl.lastIndexOf("/");
            String fileName = imageUrl.substring(start+1);
            //godness  为女神
            File appDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "godness");
            if (!appDir.exists()) {
                appDir.mkdir();
            }

            File[] files = appDir.listFiles();
            for (int i = 0; i < files.length; i++) {
                if (files[i].getName().equals(fileName)){
                //判断文件是否相同,我们这里只比较名字,同在一个文件夹下,名字也是根据url取得,决定//它的唯一
                    Looper.prepare();
                    Toast.makeText(context, "文件已经存在", Toast.LENGTH_SHORT).show();
                    Looper.loop();
                    return;
                }
            }
            File file = new File(appDir,fileName);
            try {
                FileOutputStream fos = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                fos.flush();
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            // 其次把文件插入到系统图库
            try {
                MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            // 通知图库扫描文件
            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
            //一下toast的提示,在加了loop消息队列后会发生阻塞,因为loop()方法本身就是个死循环
            //网易云音乐把路径显示出来了,我们这里没有弹出路径,大家随意
            Looper.prepare();
            Toast.makeText(context, "存入相册成功,请在相册中查看", Toast.LENGTH_SHORT).show();
            Looper.loop();
        } else {
            throw new IOException("Unexpected code " + response);
        }


    } catch (IOException e) {
        e.printStackTrace();
    }
}

在activity中我是这么写的:

@Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.save:
            //
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                    //在线程中吐司这种方式最直接方便了
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(WebActivity.this, "正在保存...", Toast.LENGTH_SHORT).show();
                            }
                        });
                        SavePicByUrlUtils.getBitmapUrl(WebActivity.this,url);
                    }
                }).start();

                break;
            default:
                break;
        }
    }

在相册中瞅瞅

这里写图片描述

没毛病

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:46360次
    • 积分:1521
    • 等级:
    • 排名:千里之外
    • 原创:106篇
    • 转载:2篇
    • 译文:0篇
    • 评论:21条
    最新评论