1.使用Bitmap作为壁纸
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
try { Bitmap wallpaperBitmap = BitmapFactory.decodeResource(getResources(), R.raw.girl); wallpaperManager.setBitmap(wallpaperBitmap); } catch (IOException e) { e.printStackTrace(); }
使用静态资源设置壁纸
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); try { wallpaperManager.setResource(R.raw.wallpaper); } catch (IOException e) { e.printStackTrace(); }
清除壁纸
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); try { wallpaperManager.clear(); } catch (IOException e) { e.printStackTrace(); }
设置壁纸需要添加权限
<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
动态壁纸
1.首先创建一个壁纸Service(LiveWallpaperService),继承WallpaperService
2.在LiveWallpaperService中创建一个引擎(LiveWallpaperEngine),继承LiveWallpaperService.Engine
3.在LiveWallpaperService的onCreateEngine方法中,返回LiveWallpaperEngine的实例
4.在AndroidManifest添加Service
public class CameraLiveWallpaper extends WallpaperService { @Override public Engine onCreateEngine() { return new CameraEngine(); } class CameraEngine extends Engine implements Camera.PreviewCallback { private Camera camera; @Override public void onCreate(SurfaceHolder surfaceHolder) { super.onCreate(surfaceHolder); startPreview(); // 设置处理触摸事件 setTouchEventsEnabled(true); } @Override public void onTouchEvent(MotionEvent event) { super.onTouchEvent(event); // 时间处理:点击拍照,长按拍照 } @Override public void onDestroy() { super.onDestroy(); stopPreview(); } @Override public void onVisibilityChanged(boolean visible) { if (visible) { startPreview(); } else { stopPreview(); } } /** * 开始预览 */ public void startPreview() { camera = Camera.open(); camera.setDisplayOrientation(90); try { camera.setPreviewDisplay(getSurfaceHolder()); } catch (IOException e) { e.printStackTrace(); } camera.startPreview(); } /** * 停止预览 */ public void stopPreview() { if (camera != null) { try { camera.stopPreview(); camera.setPreviewCallback(null); // camera.lock(); camera.release(); } catch (Exception e) { e.printStackTrace(); } camera = null; } } @Override public void onPreviewFrame(byte[] bytes, Camera camera) { camera.addCallbackBuffer(bytes); } } }
<service android:name=".test.CameraLiveWallpaper" android:label="@string/app_name" android:permission="android.permission.BIND_WALLPAPER"> <intent-filter> <action android:name="android.service.wallpaper.WallpaperService" /> </intent-filter> <meta-data android:name="android.service.wallpaper" android:resource="@xml/livewallpaper" /> </service>
res/xml
<?xml version="1.0" encoding="utf-8"?> <wallpaper xmlns:android="http://schemas.android.com/apk/res/android" android:thumbnail="@mipmap/ic_launcher" />
本文参考于
https://github.com/songixan/Wallpaper