安卓一键换壁纸

360手机有一个很赞的应用,没有界面,点击一下图标换一张壁纸,其他手机都没有看到这个功能。

vivo倒是有亮屏换锁屏壁纸。

1.无界面应用

https://blog.51cto.com/u_16213305/8503774

AndroidManifest.xml

主题改为不显示

<activity android:name=".MainActivity"
          android:theme="@android:style/Theme.NoDisplay">

安卓高版本报错:did not call finish() prior to onResume() completing

改成透明主题

<activity android:name=".MainActivity"
          android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">

2.壁纸API

Bing每日壁纸: http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

3.下载壁纸

Android HttpURLConnection下载网络图片设置系统壁纸_Android_脚本之家

URL httpUrl = new URL(imgUrl);
HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
InputStream IS = conn.getInputStream();

4.数据转换为Bitmap

Bitmap bitmap = BitmapFactory.decodeStream(IS);

5.设置壁纸

10.9 WallpaperManager(壁纸管理器) · W3School 菜鸟笔记 Android 基础入门教程 · 看云

https://www.cnblogs.com/android-deli/p/10116723.html

<uses-permission android:name="android.permission.SET_WALLPAPER"/> 
WallpaperManager WM = WallpaperManager.getInstance(this);
WM.setBitmap(bitmap);

问题

1.Cleartext HTTP traffic to xxx not permitted

AndroidManifest.xml

<application
    ....
        android:usesCleartextTraffic="true">

2.NetworkOnMainThreadException

网络进程要写在 new Thread 里。

3.锁屏和桌面同时改变

好像高版本安卓底层代码是这样设置的,而且锁屏亮屏自动切换壁纸会被关掉。

主要代码

MainActivity.java

package com.hty.wallpaper;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;

import org.json.JSONObject;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new Thread(api).start();
    }

    Thread api = new Thread() {
        @Override
        public void run() {
            String surl = "http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1";
            String s = Utils.getURLResponse(surl);
            try {
                JSONObject JO = new JSONObject(s);
                surl = "http://www.bing.com" + JO.getJSONArray("images").getJSONObject(0).getString("url");
                Log.e(Thread.currentThread().getStackTrace()[2] + "", surl);
                Bitmap bitmap = Utils.getBitmap(surl);
                Message message = new Message();
                message.what = 0;
                Bundle bundle = new Bundle();
                bundle.putParcelable("bitmap", bitmap);
                message.setData(bundle);
                handler.sendMessage(message);
            } catch (Exception e) {
                Log.e(Thread.currentThread().getStackTrace()[2] + "", e.toString());
                String sm =  e.toString();
                Message message = new Message();
                message.what = 1;
                message.obj = sm;
                handler.sendMessage(message);
            }
        }
    };

    @SuppressLint("HandlerLeak")
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0:
                    Bitmap bitmap = msg.getData().getParcelable("bitmap");
                    WallpaperManager WM = WallpaperManager.getInstance(MainActivity.this);
                    try {
                        WM.setBitmap(bitmap);
                    } catch (Exception e) {
                        Log.e(Thread.currentThread().getStackTrace()[2] + "", e.toString());
                    }
                    finish();
                    break;
                case 1:
                    String s = (String) msg.obj;
                    Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };

}

Utils.java

package com.hty.wallpaper;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

public class Utils {

	static String getURLResponse(String surl) {
		HttpURLConnection connection = null;
		InputStream IS = null;
		String resultData = "";
		try {
			URL url = new URL(surl);
			connection = (HttpURLConnection) url.openConnection();
			//connection.setDoInput(true);
			//connection.setUseCaches(false);
			connection.setRequestMethod("GET");
			IS = connection.getInputStream();
			InputStreamReader ISR = new InputStreamReader(IS, StandardCharsets.UTF_8);
			BufferedReader BR = new BufferedReader(ISR);
			String inputLine;
			while ((inputLine = BR.readLine()) != null) {
				resultData += inputLine;
			}
		} catch (Exception e) {
			Log.e(Thread.currentThread().getStackTrace()[2] + "", e.toString());
		} finally {
			if (IS != null) {
				try {
					IS.close();
				} catch (Exception e) {
					Log.e(Thread.currentThread().getStackTrace()[2] + "", e.toString());
				}
			}
			if (connection != null) {
				connection.disconnect();
			}
		}
		return resultData;
	}

	//https://blog.csdn.net/wu8022/article/details/10310527
	static Bitmap getBitmap(String imageUrl) {
		Bitmap bitmap = null;
		try {
			URL url = new URL(imageUrl);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			InputStream IS = conn.getInputStream();
			bitmap = BitmapFactory.decodeStream(IS);
		} catch (Exception e) {
			Log.e(Thread.currentThread().getStackTrace()[2] + "", e.toString());
		}
		return bitmap;
	}

}

完整源码

GitLink | 新一代开源创新服务平台

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值