设置图片为手机背景

参考:
1.stackoverflow
2.Android Technology Blog

#简单的方法

主要的方法是:

1
2
3
4
5
6
7
8
WallpaperManager myWallpaperManager 
= WallpaperManager.getInstance(getApplicationContext());
try {
myWallpaperManager.setResource(R.drawable.five);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

其中WallpaperManager还有其他的设置壁纸的方法,如setBitmap等,可以去官网)了解一下。

#设置合适的参数

如果图片比较高清,那么壁纸很可能显示不完全,或者很模糊。要想把整张图片完全的作为壁纸显示,其实只要简单几步即可,如下:
1.在AndroidManifest文件中添加如下的权限:

1
2
3
4
<!-- 设置壁纸的权限 -->
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<!-- 设置壁纸参数的权限 -->
<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/>

2.设置壁纸的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* 把bitmap设置为壁纸
* @param context 上下文
* @param bitmap 要设置为壁纸的bitmap
* */
public void setWallpaper(Context context, Bitmap bitmap) {
WallpaperManager manager = WallpaperManager.getInstance(context);

int desiredWidth = context.getWindowManager().getDefaultDisplay().getWidth();
int desiredHeight = context.getWindowManager().getDefaultDisplay().getHeight();
Bitmap sb = scaleBitmap(bitmap, desiredWidth, desiredHeight);

int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
int screenHeight = context.getResources().getDisplayMetrics().heightPixels;
manager.suggestDesiredDimensions(screenWidth, screenHeight);

manager.setBitmap(sb);
}

/**
* 裁剪bitmap
* @param b 原始图片
* @param w 目标宽
* @param h 目标高
* @return 裁剪后的bitmap
* */
private Bitmap scaleBitmap(Bitmap b, int w, int h) {
int width = b.getWidth();
int height = b.getHeight();

float scaleWidth = ((float) w) / width;
float scaleHeight = ((float) h) / height;

Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);//缩放

return Bitmap.createBitmap(b, 0, 0, width, height, matrix, true);
}

2.1 根据屏幕的宽和高裁剪原始的bitmap:

1
2
3
int desiredWidth = context.getWindowManager().getDefaultDisplay().getWidth();
int desiredHeight = context.getWindowManager().getDefaultDisplay().getHeight();
Bitmap sb = scaleBitmap(bitmap, desiredWidth, desiredHeight);

2.2 为WallpaperManager设置合适的宽和高:

1
2
3
int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
int screenHeight = context.getResources().getDisplayMetrics().heightPixels;
manager.suggestDesiredDimensions(screenWidth, screenHeight);