Android HttpURLConnection下载网络图片设置系统壁纸

需求:

壁纸是url链接,get就能请求到,所以就用get请求到图片,把图片转化为bitmap,然后设置壁纸。

代码:

这里我封装了工具类

package xxxxx.utils;

import android.app.Activity;
import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * 设置壁纸
 * 1、下载网络图片,使用HttpURLConnection
 * 2、设置壁纸
 * Created by zst on 2018/10/15.
 */

public class HttpURLConnectionUtil {

  /**
   * 设置系统壁纸
   * 1、把网络图片设置系统壁纸
   * 2、因为谷歌不维护其他框架了,所以使用HttpURLConnection来下载和配置
   *
   * @param activity
   * @param imgUrl
   */
  public static void setWallpaper(final Activity activity, final String imgUrl) {
    //Log.e("壁纸", "链接:" + imgUrl);

    new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          URL httpUrl = new URL(imgUrl);//获取传入进来的url地址 并捕获解析过程产生的异常
          //使用是Http访问 所以用HttpURLConnection 同理如果使用的是https 则用HttpsURLConnection
          try {
            HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();//通过httpUrl开启一个HttpURLConnection对象
            conn.setReadTimeout(5000);//设置显示超市时间为5秒
            conn.setRequestMethod("GET");//设置访问方式
            conn.setDoInput(true);//设置可以获取输入流

            InputStream in = conn.getInputStream();//获取输入流

            //创建一个写入ID卡的文件对象
            FileOutputStream out = null;
            File download = null;
            String filename = String.valueOf(System.currentTimeMillis());//获取系统时间
            //判断文件是否存在  Environment.MEDIA_MOUNTEDID卡是否挂载 如果是则创建文件对象
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
              File parent = Environment.getExternalStorageDirectory();//获取ID卡目录
              download = new File(parent, filename);//在父类的目录下创建一个以当前下载的系统时间为文件名的文件

              out = new FileOutputStream(download);
            }

            byte[] b = new byte[2 * 1024];
            int len;
            if (out != null) {//id卡如果存在 则写入
              while ((len = in.read(b)) != -1) {
                out.write(b, 0, len);
              }
            }

            //读取该文件中的内容
            final Bitmap bitmap = BitmapFactory.decodeFile(download.getAbsolutePath());
            activity.runOnUiThread(new Runnable() {
              @Override
              public void run() {
                //设置图片为壁纸
                //Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),R.drawable.bg_user_top);//设置项目res中的图片
                WallpaperManager manager = WallpaperManager.getInstance(activity);
                try {
                  manager.setBitmap(bitmap);
                  UiUtil.showToastLong(activity, "壁纸设置成功,请在桌面上查看");
                } catch (IOException e) {
                  UiUtil.showToast(activity, "壁纸设置成失败");
                  e.printStackTrace();
                }
              }
            });

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

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

      }
    }).start();
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android编程之动态壁纸实例分析

    本文实例讲述了Android编程之动态壁纸.分享给大家供大家参考,具体如下: 从android 2.1版本起引入了动态壁纸的概念,熟悉android的人一定不会陌生.这里解释一个动态壁纸是怎么形成又是怎么工作的. 首先动态桌面的动态体现出这个组件是实时变化的,也就是说有一个后台在不停的刷新这个组件.联想到后台组件首先想到的就是service,从代码角度看,果然如此.每一个动态桌面都继承自WallpaperService,其中必须实现的抽象方法onCreateEngine,返回一个Engine对象

  • Android仿百度壁纸客户端之搭建主框架(一)

    这是个不错的教程,自己学完了之后就拿出来分享了,本来想一个帖子写完,但是发现这样对自己写博客的效率有点出入,为了让大家看的舒服点,所以分开来写,我们先开看下百度壁纸的客户端是什么样子的 我们先来写个主页的框架,我们新建一个项目--BaiDuWallPaper 写个Item layout_tab_item <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&quo

  • Android使用线程更换壁纸

    本文实例为大家分享了30行Android代码更换壁纸的方法,供大家参考,具体内容如下 先看效果: 一个线程30行代码搞定: public class MainActivity extends Activity { Thread thread = new Thread(){ @Override public void run() { for (;current<5;){ if (current >= 3) { current = 0; } //使用资源文件 当然你也可以使用其他图片bitmap

  • android动态壁纸调用的简单实例

    调用后动态壁纸其实是显示在Activity的后面,而Activity则是透明显示,这样就可以看到下面的动态壁纸,如果Activity不是透明的则什么也看不到. 代码中有用到两个接口 IWallpaperService mService; IWallpaperEngine mEngine; 我们可以看到该目录下面有三个aidl接口,分别是 复制代码 代码如下: interface IWallpaperConnection { void attachEngine(IWallpaperEngine e

  • Android开发学习之WallPaper设置壁纸详细介绍与实例

    今天和大家分享的是关于在Android中设置壁纸的方法,在Android中设置壁纸的方法有三种,分别是: 1.使用WallpaperManager的setResource(int ResourceID)方法 2.使用WallpaperManager的setBitmap(Bitmap bitmap)方法 3.重写ContextWrapper 类中提供的setWallpaper() 除此之外,我们还需要在应用程序中加入下列权限: <uses-permission android:name="a

  • Android动态时钟壁纸开发

    本文实例为大家分享了Android动态时钟壁纸展示的具体代码,供大家参考,具体内容如下 先看效果 上图是动态壁纸钟的一个时钟. 我们先来看看 Livewallpaper(即动态墙纸)的实现,Android的动态墙纸并不是GIF图片,而是一个标准的Android应用程序,也就是APK.既然是应用程序,当然意味着天生具有GIF图片不具备的功能--能与用户发生交互,而且动态的背景变化绝不仅仅局限于GIF图片那般只能是固定的几张图片的循环播放.但是我们在这里没有加入与用户交互的动作,只是加入一个时钟(当

  • Android实现手机壁纸改变的方法

    本文实例讲述了Android实现手机壁纸改变的方法.分享给大家供大家参考.具体如下: main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" androi

  • Android编程之手机壁纸WallPaper设置方法示例

    本文实例讲述了Android编程之手机壁纸WallPaper设置方法.分享给大家供大家参考,具体如下: /** * Andorid设置手机屏幕的壁纸 * * @description: * @author ldm * @date 2016-5-4 下午3:08:56 */ public class SetWallpaperActivity extends Activity { // WallpaperManager类:系统壁纸管理.通过它可以获得当前壁纸以及设置指定图片作为系统壁纸. priva

  • Android-Service实现手机壁纸自动更换

    本文实例为大家分享了Android Service实现自动更换手机壁纸的具体代码,供大家参考,具体内容如下 先看下效果: 使用界面: 划重点,使用service前别忘了给相应的service添加服务 <service android:name=".ChangeService"></service> 具体实现: 首先定义ChangeService类,继承Service访问系统实现壁纸切换 public class ChangeService extends Ser

  • Android自定义动态壁纸开发详解

    看到有些手机酷炫的动态壁纸,有没有好奇过他们是如何实现的,其实我们自己也可以实现. 一.动态壁纸原理 如果你了解使用过SurfaceView的话,那么开发一款动态壁纸对你来说其实非常简单. 动态壁纸的本质其实就是一个服务在维护一个动态壁纸引擎Engine,所以我们看到的动态效果其实是通过这个引擎画出来的.而维护这个引擎的服务,就是WallpaperService.本篇文章并不讨论内部实现原理,只是让大家知道如何去实现动态壁纸,所以就不详细说了. 二.实现动态壁纸 大体上可分为三个步骤: 创建自定

随机推荐