package com.example.administrator.searchpicturetool.model; import android.app.Activity; import android.app.WallpaperManager; import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; import com.example.administrator.searchpicturetool.config.API; import com.facebook.common.executors.CallerThreadExecutor; import com.facebook.common.references.CloseableReference; import com.facebook.datasource.DataSource; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.imagepipeline.core.ImagePipeline; import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber; import com.facebook.imagepipeline.image.CloseableImage; import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; import com.jude.utils.JUtils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Created by wenhuaijun on 2015/11/7 0007. * 这就是不用Rxjava的痛点,IO线程和UI线程进行切换需要层层嵌套 */ @Deprecated public class TheOldSaveBitmapModel { public static void saveBitmap(final Activity activity,Context context,String url, final SaveCallBack callBack){ ImageRequest imageRequest = ImageRequestBuilder .newBuilderWithSource(Uri.parse(url)) .setProgressiveRenderingEnabled(true) .build(); ImagePipeline imagePipeline = Fresco.getImagePipeline(); DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, context); dataSource.subscribe(new BaseBitmapDataSubscriber() { @Override protected void onNewResultImpl(final Bitmap bitmap) { new Thread(new Runnable() { @Override public void run() { String name = "/" + System.currentTimeMillis() + ".png"; File file = new File(API.imgPath); if (!file.exists()) { JUtils.Log("!file.exists()"); file.mkdir(); } try { file = new File(API.imgPath + name); if (file.createNewFile()) { FileOutputStream fileOutputStream = new FileOutputStream(file); // BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file)); //BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream); // Bitmap mBitmap = Bitmap.createScaledBitmap(bitmap,width,height,true); bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream); fileOutputStream.flush(); fileOutputStream.close(); } else { final String path1 = file.toString(); activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onSuccess(path1); } }); } } catch (IOException e) { e.printStackTrace(); activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onError(0); } }); } final String path =file.toString(); activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onSuccess(path); } }); } }).start(); } @Override protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) { callBack.onError(1); } }, CallerThreadExecutor.getInstance()); } public static void setWrapper(final Activity activity,final Context context, final String url, final SaveCallBack callBack){ new Thread(new Runnable() { @Override public void run() { ImageRequest imageRequest = ImageRequestBuilder .newBuilderWithSource(Uri.parse(url)) .setProgressiveRenderingEnabled(true) .build(); ImagePipeline imagePipeline = Fresco.getImagePipeline(); DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, context); dataSource.subscribe(new BaseBitmapDataSubscriber() { @Override protected void onNewResultImpl(Bitmap bitmap) { WallpaperManager wallpaperManager = WallpaperManager.getInstance(context); try { wallpaperManager.setBitmap(bitmap); activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onSuccess("success"); } }); } catch (IOException e) { e.printStackTrace(); activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onError(0); } }); } } @Override protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) { activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onError(0); } }); } },CallerThreadExecutor.getInstance()); } }).start(); } public static void setLockWrapper(final Activity activity,final Context context, final String url, final SaveCallBack callBack){ new Thread(new Runnable() { @Override public void run() { ImageRequest imageRequest = ImageRequestBuilder .newBuilderWithSource(Uri.parse(url)) .setProgressiveRenderingEnabled(true) .build(); ImagePipeline imagePipeline = Fresco.getImagePipeline(); DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, context); dataSource.subscribe(new BaseBitmapDataSubscriber() { @Override protected void onNewResultImpl(Bitmap bitmap) { try { WallpaperManager mWallManager =WallpaperManager.getInstance(context); Class class1 =mWallManager.getClass(); Method setWallPaperMethod =class1.getMethod("setBitmapToLockWallpaper",Bitmap.class); setWallPaperMethod.invoke(mWallManager,bitmap); activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onSuccess("success"); } }); } catch (NoSuchMethodException e) { e.printStackTrace(); activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onError(0); } }); } catch (InvocationTargetException e) { e.printStackTrace(); activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onError(0); } }); } catch (IllegalAccessException e) { e.printStackTrace(); activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onError(0); } }); } } @Override protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) { activity.runOnUiThread(new Runnable() { @Override public void run() { callBack.onError(0); } }); } },CallerThreadExecutor.getInstance()); } }).start(); } public interface SaveCallBack{ public void onSuccess(String path); public void onError(int status); } }