package com.videogo.ui.util; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.net.Uri; import android.text.TextUtils; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.ResourceDecoder; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.Resource; import com.bumptech.glide.load.resource.bitmap.BitmapResource; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import com.videogo.EzvizApplication; import com.videogo.exception.InnerException; import com.videogo.openapi.bean.EZCameraInfo; import com.videogo.openapi.bean.EZDeviceInfo; import com.videogo.util.LogUtil; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import ezviz.ezopensdk.R; public class EZUtils { private final static String TAG = EZUtils.class.getSimpleName(); public static void saveCapturePictrue(String filePath, Bitmap bitmap) throws InnerException { if (TextUtils.isEmpty(filePath)){ LogUtil.d("EZUtils","saveCapturePictrue file is null"); return; } File filepath = new File(filePath); File parent = filepath.getParentFile(); if (parent == null || !parent.exists() || parent.isFile()) { parent.mkdirs(); } FileOutputStream out = null; try { // 保存原图 if (!TextUtils.isEmpty(filePath)) { out = new FileOutputStream(filepath); bitmap.compress(CompressFormat.JPEG, 100, out); //out.write(tempBuf, 0, size); out.flush(); out.close(); out = null; } } catch (FileNotFoundException e) { // throw new InnerException(e.getLocalizedMessage()); e.printStackTrace(); } catch (IOException e) { // throw new InnerException(e.getLocalizedMessage()); e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public static Object getPrivateMethodInvoke(Object instance, /*Class destClass,*/ String methodName, Class[] parameterClass, Object... args) throws Exception { Class[] parameterTypes = null; if(args != null) { parameterTypes = parameterClass; } Method method = instance.getClass().getDeclaredMethod(methodName, parameterTypes); method.setAccessible(true); return method.invoke(instance, args); } public static EZCameraInfo getCameraInfoFromDevice(EZDeviceInfo deviceInfo,int camera_index) { if (deviceInfo == null) { return null; } if (deviceInfo.getCameraNum() > 0 && deviceInfo.getCameraInfoList() != null && deviceInfo.getCameraInfoList().size() > camera_index) { return deviceInfo.getCameraInfoList().get(camera_index); } return null; } public static EZDeviceInfo CopyEzDeviceInfoNoCameraAndDetector(EZDeviceInfo deviceInfo) { if (deviceInfo == null) { return null; } EZDeviceInfo ezDeviceInfo = new EZDeviceInfo(); ezDeviceInfo.setDeviceName(deviceInfo.getDeviceName()); ezDeviceInfo.setIsEncrypt(deviceInfo.getIsEncrypt()); ezDeviceInfo.setCameraNum(deviceInfo.getCameraNum()); ezDeviceInfo.setDefence(deviceInfo.getDefence()); return deviceInfo; } private static boolean isEncrypt(String url){ int ret = 0; try { String keyOfTargetValue = "isEncrypted"; String strIsEncrypted = Uri.parse(url).getQueryParameter(keyOfTargetValue); if (strIsEncrypted != null){ ret = Integer.parseInt(strIsEncrypted); }else{ LogUtil.e(TAG, "not find key: " +keyOfTargetValue); } }catch (Exception e){ e.printStackTrace(); } return ret == 1; } public static void loadImage(final Context context, final ImageView imageView, final String url, final String deviceSerial,final VerifyCodeInput.VerifyCodeErrorListener verifyCodeErrorListener) { final String verifyCode = DataManager.getInstance().getDeviceSerialVerifyCode(deviceSerial); if (!isEncrypt(url)){ Glide.with(context).load(url) .placeholder(R.drawable.notify_bg) .listener(new RequestListener() { @Override public boolean onException(Exception e, String s, Target target, boolean b) { if (e != null) { e.printStackTrace(); } return false; } @Override public boolean onResourceReady(GlideDrawable glideDrawable, String s, Target target, boolean b, boolean b1) { return false; } }) .error(R.drawable.event_list_fail_pic) .into(imageView); }else{ if (TextUtils.isEmpty(verifyCode)){ imageView.setImageResource(R.drawable.alarm_encrypt_image_mid); if (verifyCodeErrorListener != null) { verifyCodeErrorListener.verifyCodeError(); } return; } Glide.with(context) .load(url) .asBitmap() /**************图片加载监听,打印错误信息*************************/ .listener(new RequestListener() { @Override public boolean onException(Exception e, String model, Target target, boolean isFirstResource) { if (e != null) { e.printStackTrace(); } return false; } @Override public boolean onResourceReady(Bitmap resource, String model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { return false; } }) .placeholder(R.drawable.notify_bg) /**************加密图片本地文件缓存,开发者自己决定缓存机制*******************/ .diskCacheStrategy(DiskCacheStrategy.RESULT) .error(R.drawable.event_list_fail_pic) .imageDecoder(new ResourceDecoder() { @Override public Resource decode(InputStream source, int width, int height) throws IOException { ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buffer = new byte[4096]; Bitmap desBitmap = null; int n = 0; while (-1 != (n = source.read(buffer))) { output.write(buffer, 0, n); } output.flush(); output.close(); byte[] src = output.toByteArray(); if (src == null || src.length <= 0){ LogUtil.d("EZUTils","图片加载错误!"); return null; } if (!isEncrypt(url)){ desBitmap = BitmapFactory.decodeByteArray(src, 0, src.length); }else{ /*************** 开发者需要调用此接口解密 ****************/ byte[] data1 = EzvizApplication.getOpenSDK().decryptData(output.toByteArray(), verifyCode); if (data1 == null || data1.length <= 0){ LogUtil.d("EZUTils","verifyCodeError!"); /*************** 验证码错误 ,此处回调是在子线程中,处理UI需调回到主线程****************/ if (verifyCodeErrorListener != null) { verifyCodeErrorListener.verifyCodeError(); } }else { desBitmap = BitmapFactory.decodeByteArray(data1, 0, data1.length); } } if (desBitmap != null){ return new BitmapResource(desBitmap,DataManager.getInstance().getBitmapPool(context)); } return null; } @Override public String getId() { return url; } }) .into(imageView); } } }