<uses-feature
android:name="android.software.live_wallpaper"
android:required="true" />
xml文件配置
<?xml version="1.0" encoding="utf-8"?>
<wallpaper
xmlns:android="http://schemas.android.com/apk/res/android"
android:thumbnail="@mipmap/ic_launcher"/>
核心WallpaperService.java
public class WallpaperService extends android.service.wallpaper.WallpaperService {
private static String TAG = "WallpaperService";
private static final String SERVICE_NAME = "com.dq.wallpaper.service.WallpaperService";
@Override
public Engine onCreateEngine() {
return new CameraEngine();
}
public static void startWallPaper(Context context) {
Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(context, WallpaperService.class));
context.startActivity(intent);
}
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() {
Log.e("TAG", "开始预览");
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.release();
} catch (Exception e) {
e.printStackTrace();
}
camera = null;
}
}
@Override
public void onPreviewFrame(byte[] bytes, Camera camera) {
camera.addCallbackBuffer(bytes);
}
}
}