package com.github.miao1007.animewallpaper.utils; import android.annotation.TargetApi; import android.app.WallpaperManager; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.support.annotation.RequiresPermission; import android.support.annotation.UiThread; import android.widget.Toast; import com.github.miao1007.animewallpaper.R; import java.io.File; import java.io.IOException; /** * Created by leon on 1/30/16. */ @UiThread final public class WallpaperUtils { private static final String TAG = "WallpaperUtils"; private WallpaperUtils() { throw new IllegalStateException("Can't be a instance"); } //public static void onActivityResult(int requestCode, int resultCode, Intent data) { // if (requestCode != TAG) { // return; // } // setWallPaperCompat(); //} /** * Kitkat lower can't effectively use planet wallpaper * so crop is not required */ private static void setWallPaperCompat(Context context, File file) { WallpaperManager wm = WallpaperManager.getInstance(context); try { wm.setBitmap(BitmapFactory.decodeFile(file.getAbsolutePath())); } catch (IOException | OutOfMemoryError e) { Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show(); previewImage(context, file); } } @TargetApi(Build.VERSION_CODES.KITKAT) private static void setWallpaperKitkat(Context context, File file) { Uri uri = Uri.fromFile(file); Intent intent = new Intent(WallpaperManager.ACTION_CROP_AND_SET_WALLPAPER); String mime = "image/*"; intent.setDataAndType(uri, mime); try { context.startActivity(intent); } catch (ActivityNotFoundException e) { setWallPaperCompat(context, file); e.printStackTrace(); } } public static void previewImage(Context context, File file) { final Intent shareIntent = new Intent(Intent.ACTION_VIEW); shareIntent.setDataAndType(Uri.fromFile(file), "image/*"); context.startActivity( Intent.createChooser(shareIntent, context.getString(R.string.view_image_by))); } @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public static void setWallpaper(Context context, File file) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { setWallpaperKitkat(context, file); } else { setWallPaperCompat(context, file); } } }