package net.sourceforge.simcpux.uikit; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import com.tencent.mm.algorithm.MD5; import com.tencent.mm.sdk.platformtools.Log; import com.tencent.mm.sdk.platformtools.Util; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.provider.MediaStore; import android.provider.MediaStore.MediaColumns; import android.text.format.DateFormat; public final class CameraUtil { private static final String TAG = "MicroMsg.SDK.CameraUtil"; private static String filePath = null; private CameraUtil() { // can't be instantiated } public static boolean takePhoto(final Activity activity, final String dir, final String filename, final int cmd) { filePath = dir + filename; final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); final File cameraDir = new File(dir); if (!cameraDir.exists()) { return false; } final File file = new File(filePath); final Uri outputFileUri = Uri.fromFile(file); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); try { activity.startActivityForResult(intent, cmd); } catch (final ActivityNotFoundException e) { return false; } return true; } public static String getResultPhotoPath(Context context, final Intent intent, final String dir) { if (filePath != null && new File(filePath).exists()) { return filePath; } return resolvePhotoFromIntent(context, intent, dir); } public static String resolvePhotoFromIntent(final Context ctx, final Intent data, final String dir) { if (ctx == null || data == null || dir == null) { Log.e(TAG, "resolvePhotoFromIntent fail, invalid argument"); return null; } String filePath = null; final Uri uri = Uri.parse(data.toURI()); Cursor cu = ctx.getContentResolver().query(uri, null, null, null, null); if (cu != null && cu.getCount() > 0) { try { cu.moveToFirst(); final int pathIndex = cu.getColumnIndex(MediaColumns.DATA); Log.e(TAG, "orition: " + cu.getString(cu.getColumnIndex(MediaStore.Images.ImageColumns.ORIENTATION))); filePath = cu.getString(pathIndex); Log.d(TAG, "photo from resolver, path:" + filePath); } catch (Exception e) { e.printStackTrace(); } } else if (data.getData() != null) { filePath = data.getData().getPath(); if (!(new File(filePath)).exists()) { filePath = null; } Log.d(TAG, "photo file from data, path:" + filePath); } else if (data.getAction() != null && data.getAction().equals("inline-data")) { try { final String fileName = MD5.getMessageDigest(DateFormat.format("yyyy-MM-dd-HH-mm-ss", System.currentTimeMillis()).toString().getBytes()) + Util.PHOTO_DEFAULT_EXT; filePath = dir + fileName; final Bitmap bitmap = (Bitmap) data.getExtras().get("data"); final File file = new File(filePath); if (!file.exists()) { file.createNewFile(); } BufferedOutputStream out; out = new BufferedOutputStream(new FileOutputStream(file)); final int cQuality = 100; bitmap.compress(Bitmap.CompressFormat.PNG, cQuality, out); out.close(); Log.d(TAG, "photo image from data, path:" + filePath); } catch (final Exception e) { e.printStackTrace(); } } else { if (cu != null) { cu.close(); cu = null; } Log.e(TAG, "resolve photo from intent failed"); return null; } if (cu != null) { cu.close(); cu = null; } return filePath; } }