将本地图片设置为桌面壁纸的方法如下:开启分线程去执行时因为在部分手机上测试发现这个过程非常耗时(可能10s钟),所以容易出现ANR,因此开启一个分线程:
static class PreviewHandler extends Handler {
private final WeakReference<PreviewActivity> mActivity;
PreviewHandler(PreviewActivity activity) {
mActivity = new WeakReference<PreviewActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
PreviewActivity activity = mActivity.get();
if (null != activity) {
activity.handleMessage(msg);
}
}
}
private void handleMessage(Message msg) {
clearWaitProgressImmediately();
switch (msg.what) {
case SET_PIC_WALL_PAPER_ERROR:
Toast.makeText(PreviewActivity.this, getResources().getString(R.string.set_pic_wall_paper_fail), Toast.LENGTH_SHORT).show();
break;
case SET_PIC_WALL_PAPER_SUCESS:
Toast.makeText(PreviewActivity.this, getResources().getString(R.string.set_pic_wall_paper_sucess), Toast.LENGTH_SHORT).show();
break;
}
}
/**
* 设置壁纸
*/
private void setPicWallPaper() {
mPreviewHandler = new PreviewHandler(this);
new Thread(new Runnable() {
@Override
public void run() {
try {
WallpaperManager instance = WallpaperManager.getInstance(PreviewActivity.this);
int desiredMinimumWidth = getWindowManager().getDefaultDisplay().getWidth();
int desiredMinimumHeight = getWindowManager().getDefaultDisplay().getHeight();
instance.suggestDesiredDimensions(desiredMinimumWidth, desiredMinimumHeight);
Bitmap bitmap = BitmapFactory.decodeFile(photoPath);//图片的路径
instance.setBitmap(bitmap);
bitmap.recycle();
bitmap = null;
mPreviewHandler.sendEmptyMessage(SET_PIC_WALL_PAPER_SUCESS);
} catch (IOException e) {
mPreviewHandler.sendEmptyMessage(SET_PIC_WALL_PAPER_ERROR);
}
}
}).start();
showWaitProgress();//一个设置的progressbar
}