Android-okhttp下载网络图片并设置壁纸
在AndroidManifest.xml配置网络访问权限:
<!-- 访问网络是危险的行为 所以需要权限 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 设置壁纸是危险的行为 所以需要权限 -->
<uses-permission android:name="android.permission.SET_WALLPAPER" />
在 app/build.gradle 加入
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
然后点击 sync now 下载okhttp支持包

MainActivity
package liudeli.async.okhttp2; import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast; import java.io.IOException;
import java.io.InputStream; import liudeli.async.R;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response; public class MainActivity extends Activity { private final static String TAG = MainActivity.class.getSimpleName(); // 图片地址
private final String PATH = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000" +
"&sec=1544714792699&di=3c2de372608ed6323f583f1c1b445e51&imgtype=0&src=http%3A%2F%2Fp" +
"2.qhimgs4.com%2Ft0105d27180a686e91f.jpg"; private ImageView imageView;
private Button bt_set_wallpaper;
private ProgressDialog progressDialog; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main4); imageView = findViewById(R.id.iv_image);
bt_set_wallpaper = findViewById(R.id.bt_set_wallpaper); Button bt_get_image = findViewById(R.id.bt_get_image);
bt_get_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 弹出进度条
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Download ...");
progressDialog.show(); /**
* 第一种方式下载图片 普通
*/
/*new Thread(){
@Override
public void run() {
super.run();
downloadImage1();
}
}.start();*/ /**
* 第二种方式下载图片 异步
*/
downloadImage2();
}
}); bt_set_wallpaper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != bitmap) {
try {
setWallpaper(bitmap);
Toast.makeText(MainActivity.this, "壁纸设置成功", Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "壁纸设置失败", Toast.LENGTH_LONG).show();
}
}
}
});
} private Bitmap bitmap; /**
* 第一种方式
* 使用okhttp 普通下载图片
*/
private void downloadImage1() { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder()
.url(PATH)
.build();
try {
Response response = client.newCall(request).execute();
InputStream inputStream = response.body().byteStream(); if (200 == response.code()) {
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
showUI(bitmap);
} else {
showUI(null);
} } catch (IOException e) {
e.printStackTrace();
showUI(null);
}
} /**
* 第二种方式
* 使用okhttp 异步下载图片
*/
private void downloadImage2() { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder()
.url(PATH)
.build();
try {
Call call = client.newCall(request); // 使用client去请求 call.enqueue(new Callback() { // 回调方法,>>> 可以获得请求结果信息
@Override
public void onFailure(Call call, IOException e) {
showUI(null); // 下载失败,更新UI
} @Override
public void onResponse(Call call, Response response) throws IOException {
InputStream inputStream = response.body().byteStream(); if (200 == response.code()) {
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
showUI(bitmap);
} else {
showUI(null);
}
}
}); } catch (Exception e) {
e.printStackTrace();
showUI(null);
}
} /**
* 显示UI 此方法是可以在 主线程 子线程 对UI操作显示的哦
* @param bitmap
*/
private void showUI(final Bitmap bitmap) {
this.bitmap = bitmap;
runOnUiThread(runnable);
} Runnable runnable = new Runnable() {
@Override
public void run() {
if (bitmap != null) { // 故意放慢两秒,模仿网络差的效果
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// 设置从网上下载的图片
imageView.setImageBitmap(bitmap);
// 设置为可以点击
bt_set_wallpaper.setEnabled(true); // 关闭进度条
progressDialog.dismiss(); Toast.makeText(MainActivity.this, "下载成功", Toast.LENGTH_SHORT).show();
}
}, 2000);
} else { //失败
bt_set_wallpaper.setEnabled(false);
Toast.makeText(MainActivity.this, "下载失败,请检查原因", Toast.LENGTH_LONG).show();
// 关闭进度条
progressDialog.dismiss();
}
}
};
}
activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <Button
android:id="@+id/bt_get_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取图片"
android:onClick="getImage"
android:layout_marginLeft="20dp"
/> <Button
android:id="@+id/bt_set_wallpaper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置壁纸"
android:layout_alignParentRight="true"
android:layout_marginRight="20dp"
android:enabled="false"
/> <ImageView
android:id="@+id/iv_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/bt_get_image" /> </RelativeLayout>
执行结果:

Android-okhttp下载网络图片并设置壁纸的更多相关文章
- IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置
原文:IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置 站点--右键属性--http头 ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- android下载网络图片,设置宽高,等比缩放
使用Picasso组件去下载图片会发现图片宽高会变形不受等比缩放控制,即使设置了图片的 scaleType,可能是对Picasso的api没有用对, Picasso.with(this.activit ...
- Android异步下载网络图片
最近新做的一个项目,里面需要下载网络上的图片,并显示在UI界面上,学Android有个常识,就是Android中在主线程中没法直接更新UI的,要想更新UI必须另外开启一个线程来实现,当开启的线程完成图 ...
- Android-获取网络图片设置壁纸
下载图片,设置壁纸 的代码: package liudeli.async; import android.app.Activity; import android.app.ProgressDialog ...
- Android开发学习—— 下载网络图片
现在几乎所有的应用都在使用网络来达到浏览的目的.对于特定领域 使用xnpp协议 像即时通讯软件.但大多数还是使用HTTP协议来交互. 网络图片查看器 HTTP协议 下载网络 图片 <Relati ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
- Android OkHttp文件上传与下载的进度监听扩展
http://www.loongwind.com/archives/290.html 上一篇文章介绍了用Retrofit实现文件的上传与下载,但是我们发现没办法监听上传下载的进度,毕竟我们在做开发的时 ...
- android下载网络图片并缓存
异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...
随机推荐
- [Hbase]Hbase容灾方案
介绍两种HBase的数据备份或者容灾方案:Snapshot,Replication: 一.Snapshot 开启快照功能,在hbase-site.xml文件中添加如下配置项: <property ...
- Exception 异常 输出的各个方法的区别
try{ System.out.println(1/0); }catch(Exception e){ //System.out.println(e+""); //对象+字符串 = ...
- 【RabbitMQ】 RabbitMQ配置开机启动
环境 系统:Linux(CentOS 7.2) Erlang环境:21.1(安装参考[Erlang]源码安装) RabbitMQ:3.7.9(安装参考[RabbitMQ] RabbitMQ安装) 配置 ...
- vue实现左侧滑动删除
不是很完美,无法做到第一个左滑其他的隐藏删除: 代码来源于 https://segmentfault.com/a/1190000011062124 自己做了写改动,添加父组件点击触发子组件 引入组件 ...
- Spring mvc项目,使用jetty插件和tomcat路径相差一个项目名
pom.xml: jetty 插件配置: <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId& ...
- 2018.12.30 poj3734 Blocks(生成函数)
传送门 生成函数入门题. 按照题意构造函数: 对于限定必须是出现偶数次的颜色:1+x22!+x44!+...=ex+e−x21+\frac {x^2}{2!}+\frac {x^4}{4!}+...= ...
- springboot xml声明式事务管理方案
在开发过程中springboot提供的常见的事务解决方案是使用注解方式实现. 使用注解 在启动类上添加注解 @EnableTransactionManagement 在需要事务控制的方法添加@Tran ...
- GreenPlum 初始化配置报错:gpadmin-[ERROR]:-[Errno 12] Cannot allocate memory
报错原因:可能swap太小或者没有交换分区 解决方法: (1)查看swap:swapon -s (2)如果什么都没有显示,说明你没有任何可用的swap,此时你可以添加1GB的swap: dd if=/ ...
- 第18章:MongoDB-聚合操作--聚合管道--$sort
①$sort 使用“$sort”可以实现排序,设置1表示升序,设置-1表示降序. ②范例:实现排序
- css 兼容ie8 rgba()用法
今天遇到了一个问题,要在一个页面中设置一个半透明的白色div.这个貌似不是难题,只需要给这个div设置如下的属性即可: background: rgba(255,255,255,.1); 但是要兼容到 ...