Android intent跳转工具类

/**
 * 进行页面跳转的工具
 * 
 * @author chen.lin
 * 
 */
public class IntentUtil {
    private static final String IMAGE_TYPE = "image/*";
    private static final String TAG = "IntentUtil";

    /**
     * 进行页面跳转
     * 
     * @param clzz
     */
    public static void showIntent(Activity context, Class<?> clzz, String[] keys, String[] values) {
        Intent intent = new Intent(context, clzz);
        if (values != null && values.length > 0) {
            for (int i = 0; i < values.length; i++) {
                if (!TextUtils.isEmpty(keys[i]) && !TextUtils.isEmpty(values[i])) {
                    intent.putExtra(keys[i], values[i]);
                }
            }
        }
        context.startActivity(intent);
    }

    public static void showIntent(Activity context, Class<?> clzz) {
        showIntent(context, clzz, null, null);
    }

    /**
     * 打电话
     * 
     * @param intent
     * @param context
     * @param tel
     */
    public static void openCall(Context context, String tel) {
        tel = tel.replaceAll("-", "");
        Intent intent = new Intent();
        // 激活源代码,添加intent对象
        intent.setAction("android.intent.action.CALL");
        intent.setData(Uri.parse("tel:" + tel));
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
    }

    /***
     * 从相册中取图片
     */
    public static void pickPhoto(Activity context, int requestCode) {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        context.startActivityForResult(intent, requestCode);
    }

    /**
     * 拍照获取图片
     */
    public static void takePhoto(Activity context, int requestCode, Uri cameraUri) {
        // 执行拍照前,应该先判断SD卡是否存在
        String SDState = Environment.getExternalStorageState();
        if (SDState.equals(Environment.MEDIA_MOUNTED)) {

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"
            Logger.i(TAG, "cameraUri.path------>" + cameraUri.getPath());

            intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, cameraUri);
            context.startActivityForResult(intent, requestCode);
        } else {
            Toast.makeText(context, "内存卡不存在", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 拍照
     * 
     * @param context
     * @param uri
     */
    public static void takePhoto(Activity context, Uri uri, int requestCode) {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

            Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.DISPLAY_NAME, String.valueOf(System.currentTimeMillis()) + ".jpg");
            values.put(MediaStore.Images.Media.MIME_TYPE, "image/*");
            uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
            // intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
            context.startActivityForResult(intent, requestCode);

        } else {
            Toast.makeText(context, "内存卡不存在", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 本地照片调用
     * 
     * @param context
     * @param requestCode
     */
    public void openPhotos(Activity context, int requestCode) {
        if (openPhotosNormal(context, requestCode) //
                && openPhotosBrowser(context, requestCode) //
                && openPhotosFinally(context))
            ;
    }

    /**
     * 这个是找不到相关的图片浏览器,或者相册
     */
    private boolean openPhotosFinally(Activity context) {
        Toast.makeText(context, "您的系统没有文件浏览器或则相册支持,请安装!", Toast.LENGTH_LONG).show();
        return false;
    }

    /**
     * 获取从本地图库返回来的时候的URI解析出来的文件路径
     * 
     * @return
     */
    public static String getPhotoPathByLocalUri(Context context, Intent data) {
        Uri photoUri = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };
        Cursor cursor = context.getContentResolver().query(photoUri, filePathColumn, null, null, null);
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();
        return picturePath;
    }

    /**
     * PopupMenu打开本地相册.
     */
    private boolean openPhotosNormal(Activity activity, int actResultCode) {
        Intent intent = new Intent(Intent.ACTION_PICK, null);
        intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_TYPE);
        try {
            activity.startActivityForResult(intent, actResultCode);

        } catch (android.content.ActivityNotFoundException e) {

            return true;
        }

        return false;
    }

    /**
     * 打开其他的一文件浏览器,如果没有本地相册的话
     */
    private boolean openPhotosBrowser(Activity activity, int requestCode) {
        Toast.makeText(activity, "没有相册软件,运行文件浏览器", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT); // "android.intent.action.GET_CONTENT"
        intent.setType(IMAGE_TYPE); // 查看类型 String IMAGE_UNSPECIFIED =
                                    // "image/*";
        Intent wrapperIntent = Intent.createChooser(intent, null);
        try {
            activity.startActivityForResult(wrapperIntent, requestCode);
        } catch (android.content.ActivityNotFoundException e1) {
            return true;
        }
        return false;
    }

    /**
     * 打开照相机
     * 
     * @param activity
     *            当前的activity
     * @param requestCode
     *            拍照成功时activity forResult 的时候的requestCode
     * @param photoFile
     *            拍照完毕时,图片保存的位置
     */
    @SuppressLint("SimpleDateFormat")
    public static Uri openCamera(Activity context, int requestCode) {
        // 执行拍照前,应该先判断SD卡是否存在
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

            SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
            String filename = timeStampFormat.format(new Date());
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.TITLE, filename);
            Uri photoUri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
            context.startActivityForResult(intent, requestCode);

            return photoUri;
        } else {
            Toast.makeText(context, "内存卡不存在", Toast.LENGTH_LONG).show();
        }
        return null;
    }


    /**
     * 选择图片后,获取图片的路径
     * 
     * @param requestCode
     * @param data
     */
    public static void doPhoto(Activity context, Intent data, int requestCode, int value, EditText editText,
            ImageView imageView, Uri photoUri) {
        // 从相册取图片,有些手机有异常情况,请注意
        if (requestCode == value) {
            if (data == null) {
                Toast.makeText(context, "选择图片文件出错", Toast.LENGTH_LONG).show();
                return;
            }
            photoUri = data.getData();
            if (photoUri == null) {
                Toast.makeText(context, "选择图片文件出错", Toast.LENGTH_LONG).show();
                return;
            }
        }

        String[] pojo = { MediaStore.Images.Media.DATA, MediaStore.Images.Media.DISPLAY_NAME };
        ContentResolver resolver = context.getContentResolver();
        Cursor cursor = resolver.query(photoUri, pojo, null, null, null);
        String picPath = null;
        String filename = null;
        if (cursor != null) {
            int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);
            cursor.moveToFirst();
            picPath = cursor.getString(columnIndex);
            filename = cursor.getString(cursor.getColumnIndexOrThrow(pojo[1]));

            editText.requestFocus();
            editText.setText(filename);

            cursor.close();
        }
        String dix = filename.substring(filename.lastIndexOf("."), filename.length());

        if (filename != null
                && (dix.equalsIgnoreCase(".png") || dix.equalsIgnoreCase(".jpg") || dix.equalsIgnoreCase(".gif")
                        || dix.equalsIgnoreCase(".bmp") || dix.equalsIgnoreCase(".jpeg") || dix
                            .equalsIgnoreCase(".tiff"))) {
            // lastIntent.putExtra(KEY_PHOTO_PATH, picPath);
            imageView.setVisibility(View.VISIBLE);
            imageView.setImageURI(Uri.parse(picPath));
        } else {
            imageView.setVisibility(View.GONE);
            Toast.makeText(context, "选择图片文件不正确", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * FLAG_ACTIVITY_SINGLE_TOP
     * //当于加载模式中的singletop,在当前中的activity中转到当前activity,不增加新的
     * 
     * @param file
     */
    public static void openFile(Context context, File file) {
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 默认的跳转类型,它会重新创建一个新的Activity
        intent.setAction(android.content.Intent.ACTION_VIEW);
        // 调用getMIMEType()来取得MimeType
        String type = FileUtil.getMIMEType(file);
        // 设置intent的file与MimeType
        intent.setDataAndType(Uri.fromFile(file), type);
        context.startActivity(intent);
    }

    /**
     * 截取图片
     * 
     * @param uri
     * @param outputX
     * @param outputY
     * @param requestCode
     */
    public static void cropImage(Activity context, Uri uri, int outputX, int outputY, int requestCode) {
        // 裁剪图片意图
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        // 裁剪框的比例,1:1
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // 裁剪后输出图片的尺寸大小
        intent.putExtra("outputX", outputX);
        intent.putExtra("outputY", outputY);
        // 图片格式
        intent.putExtra("outputFormat", "JPEG");
        intent.putExtra("noFaceDetection", true);
        intent.putExtra("return-data", true);
        context.startActivityForResult(intent, requestCode);
    }

    /**
     * 获取图片的旋转角度
     * 
     * @param path
     * @return
     */
    public static int readPictureDegree(String path) {
        int degree = 0;
        try {
            ExifInterface exifInterface = new ExifInterface(path);
            int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                    ExifInterface.ORIENTATION_NORMAL);
            switch (orientation) {
            case ExifInterface.ORIENTATION_ROTATE_90:
                degree = 90;
                break;
            case ExifInterface.ORIENTATION_ROTATE_180:
                degree = 180;
                break;
            case ExifInterface.ORIENTATION_ROTATE_270:
                degree = 270;
                break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return degree;
    }

    /**
     * 保存文件
     * 
     * @param context
     * @param data
     * @param requestCode
     * @param imageView
     */
    public static void saveImage(Activity context, Intent data, int requestCode, ImageView imageView) {
        Bitmap photo = null;
        Uri photoUri = data.getData();
        cropImage(context, photoUri, 500, 500, requestCode);
        if (photoUri != null) {
            photo = BitmapFactory.decodeFile(photoUri.getPath());
        }
        if (photo == null) {
            Bundle extra = data.getExtras();
            if (extra != null) {
                photo = (Bitmap) extra.get("data");
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            }
        }
        imageView.setImageBitmap(photo);
    }

    /**
     * 保存照相后的图片
     * 
     * @param context
     * @param requestCode
     * @param spath
     * @return
     */
    public static boolean saveCamera(Activity context, Intent data, Uri cameraUri, EditText editText,
            ImageView imageView) {
        try {

            final Bundle extras = data.getExtras();

            if (extras != null) {
                Bitmap photo = extras.getParcelable("data");
                imageView.setImageBitmap(photo);
            }

            if (cameraUri != null) {
                String path = cameraUri.getPath();
                Logger.i(TAG, "path-->" + path);
                String filename = path.substring(path.lastIndexOf("/") + 1, path.length());
                editText.setText(filename);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值