下載圖片,設置壁紙 的代碼:
package liudeli.async; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; 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 java.net.HttpURLConnection; import java.net.URL; public class MainActivity4 extends Activity { // 圖片地址 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) { // 讓異步任務執行耗時操作 new DownloadImage().execute(PATH); } }); bt_set_wallpaper.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (null != bitmap) { try { setWallpaper(bitmap); Toast.makeText(MainActivity4.this, "壁紙設置成功", Toast.LENGTH_LONG).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(MainActivity4.this, "壁紙設置失敗", Toast.LENGTH_LONG).show(); } } } }); } private Bitmap bitmap; class DownloadImage extends AsyncTask<String, Void, Object> { /** * 執行耗時操作前執行 */ @Override protected void onPreExecute() { super.onPreExecute(); // 彈出進度條 progressDialog = new ProgressDialog(MainActivity4.this); progressDialog.setMessage("Download ..."); progressDialog.show(); } /** * 執行耗時操作 * @param strings * @return */ @Override protected Object doInBackground(String... strings) { try { // 封裝成網絡地址 URL url = new URL(PATH); // 打開一個連接 HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); // 設置連接時長 httpURLConnection.setConnectTimeout(5000); // 設置請求方式 httpURLConnection.setRequestMethod("GET"); /** * 注意:⚠️ 不要膚淺的任務 打開連接對象 設置連接時長 設置請求方式 就向服務器發送Http請求了 * 是要執行httpURLConnection.getResponseCode()才會向服務器發送Http請求 */ if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { // 得到服務器返回過來的流對象 InputStream inputStream = httpURLConnection.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 耗時執行過程中 更新進度條刻度操作 * @param values */ @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } /** * 耗時操作執行完成,用於更新UI * @param o */ @Override protected void onPostExecute(Object o) { super.onPostExecute(o); if (o != null) { // 成功 bitmap = (Bitmap) o; // 故意放慢兩秒,模仿網絡差的效果 new Handler().postDelayed(new Runnable() { @Override public void run() { // 設置從網上下載的圖片 imageView.setImageBitmap(bitmap); // 設置為可以點擊 bt_set_wallpaper.setEnabled(true); // 關閉進度條 progressDialog.dismiss(); } }, 2000); } else { //失敗 bt_set_wallpaper.setEnabled(false); Toast.makeText(MainActivity4.this, "下載失敗,請檢查原因", Toast.LENGTH_LONG).show(); // 關閉進度條 progressDialog.dismiss(); } } } }
Layout:
<?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>
AndroidManifest.xml 權限:
<!-- 訪問網絡是危險的行為 所以需要權限 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 設置壁紙是危險的行為 所以需要權限 --> <uses-permission android:name="android.permission.SET_WALLPAPER" />