public static void intent2SetWallPaper(Context context, String path) {
Uri uriPath = getUriWithPath(path);
Intent intent;
// 针对EMUI
if (RomUtil.isHuaweiRom()) {
try {
ComponentName componentName = new ComponentName("com.android.gallery3d", "com.android.gallery3d.app.Wallpaper");
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(uriPath, "image/*");
intent.putExtra("mimeType", "image/*");
intent.setComponent(componentName);
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
try {
WallpaperManager.getInstance(context.getApplicationContext()).setBitmap(ImageUtil.getImageBitmap(path));
} catch (IOException e1) {
e1.printStackTrace();
}
}
// 针对MIUI
} else if (RomUtil.isMiuiRom()) {
try {
ComponentName componentName = new ComponentName("com.android.thememanager", "com.android.thememanager.activity.WallpaperDetailActivity");
intent = new Intent("miui.intent.action.START_WALLPAPER_DETAIL");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(uriPath, "image/*");
intent.putExtra("mimeType", "image/*");
intent.setComponent(componentName);
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
try {
WallpaperManager.getInstance(context.getApplicationContext()).setBitmap(ImageUtil.getImageBitmap(path));
} catch (IOException e1) {
e1.printStackTrace();
}
}
// 其他
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
try {
intent =
WallpaperManager.getInstance(context.getApplicationContext()).getCropAndSetWallpaperIntent(uriPath);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(intent);
} catch (IllegalArgumentException e) {
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(context.getApplicationContext().getContentResolver(), uriPath);
if (bitmap != null) {
WallpaperManager.getInstance(context.getApplicationContext()).setBitmap(bitmap);
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
} else {
try {
WallpaperManager.getInstance(context.getApplicationContext()).setBitmap(ImageUtil.getImageBitmap(path));
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
为方便大家使用,封装到了github: https://github.com/SherlockGougou/SetWallpaper
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.SherlockGougou:SetWallpaper:v1.3.0'
}
SetWallpaper.setWallpaper(MainActivity.this, // 上下文
path, // 图片绝对路径
APP_AUTHORITY);// authority(7.0 文件共享权限)