【Android学习】获取Bing 15天前到明天的壁纸,并设置为背景

  根据it之家的文章做的Android小demo。
http://www.ithome.com/html/win10/211310.htm 
获取bing 15天前到明天壁纸,并可设置为手机壁纸。

【Android学习】获取Bing 15天前到明天的壁纸,并设置为背景_第1张图片

使用 SmartImageView来加载网络图片,实际过程中遇到点小问题,当时没看源码,不知道它将缓存放哪了,在哪可以调用。
虽然imageView有函数可以获取当前显示的缓存,但是他是获取的当前屏幕所显示的规格(就像截图一样)。

好在在整个项目中它有WebImage这个类, 有函数返回Bitmap。
但是这样的话就进行了两次网络请求。。。

程序可以切换查询的地区,用listview承载。



下面是主要代码:
    //设置壁纸
    public void setWallpaper() {
        new Thread() {
            public void run() {
                try {
                    WebImage web = new WebImage(imgRealPath);
                    Bitmap bmp = web.getBitmap(MainActivity.this);
                    Message msg = new Message();
                    msg.obj = bmp;
                    msg.what = 2;
                    mHandler.sendMessage(msg);

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

            }
        }.start();
    }


    public void Prev(View v)// 前一张
    {
        if (MyUtils.SelectDay == 15) {

            Toast.makeText(this, "您只能预览明天到15天前的必应壁纸哦,已经到最前面的壁纸啦", 300).show();
        } else {
            MyUtils.SelectDay += 1;
            if (MyUtils.SelectDay == 0)
                Toast.makeText(this, "今天的壁纸", 300).show();
            else
                Toast.makeText(this, MyUtils.SelectDay + "天前的壁纸", 300).show();
        }
        buildPath();
    }

    //拼接完整的请求地址
    public void buildPath() {
        path = "http://test.dou.ms/bing/day/" + MyUtils.SelectDay + "/mkt/" + MyUtils.SelectCountry;
        gogetImage();
    }

    public void Next(View v)// 后一张
    {
        if (MyUtils.SelectDay == -1) {

            Toast.makeText(this, "您只能预览明天到15天前的必应壁纸哦,已经到明天的壁纸啦", 300).show();
        } else {
            MyUtils.SelectDay -= 1;
            if (MyUtils.SelectDay == -1)
                Toast.makeText(this, "明天的壁纸", 300).show();
            else if (MyUtils.SelectDay == 0)
                Toast.makeText(this, "今天的壁纸", 300).show();
            else
                Toast.makeText(this, MyUtils.SelectDay + "天前的壁纸", 300).show();

        }
        buildPath();

    }

    public void gogetImage() {
        new Thread() {
            public void run() {
                try {
                    URL url = new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setConnectTimeout(5000);
                    conn.setRequestMethod("GET");
                    InputStream is = conn.getInputStream();
                    BufferedInputStream bis = new BufferedInputStream(is);
                    ByteArrayBuffer baf = new ByteArrayBuffer(50);
                    int current = 0;
                    while ((current = bis.read()) != -1) {
                        baf.append((byte) current);
                    }
                    String result = EncodingUtils.getString(baf.toByteArray(), "UTF-8");
                    String realimgpath = GetBingImageUrl(result);
                    int code = conn.getResponseCode();
                    if (code == 200) {
                        Message msg = new Message();
                        msg.obj = realimgpath;
                        msg.what = 1;
                        mHandler.sendMessage(msg);
                    }

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

        }.start();

    }

    // 截取字符串中 图片的地址
    public static String GetBingImageUrl(String str) {
        strArray = str.split("地址:");
        return strArray[1];
    }




在handler中更新UI
 private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            // 取出消息中的数据
            flag++;
            if (msg.what == 1) {
                imgRealPath = (String) msg.obj;
                iv_pic.setImageUrl(imgRealPath);
                tv_desc.setText(strArray[0]);
            } else if (msg.what == 2) {
                WallpaperManager instance = WallpaperManager.getInstance(MainActivity.this);
                int desiredMinimumWidth = getWindowManager().getDefaultDisplay().getWidth();
                int desiredMinimumHeight = getWindowManager().getDefaultDisplay().getHeight();
                instance.suggestDesiredDimensions(desiredMinimumWidth, desiredMinimumHeight);
                Bitmap bmp = (Bitmap) msg.obj;
                try {
                    instance.setBitmap(bmp);
                    Snackbar.make(fab, "设置成功", 300).show();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    };



主要记住了 设置壁纸,  Snackbar的使用。

还有一点就是 在Android Studuio中  compileSdkVersion 23的话要使用 useLibrary 'org.apache.http.legacy'
不然网络请求的一些包(apche.http.utils)是找不到的


你可能感兴趣的:(【Android学习】获取Bing 15天前到明天的壁纸,并设置为背景)