1. 程式人生 > >Android 相機相簿呼叫封裝類

Android 相機相簿呼叫封裝類

在app開發中相機相簿的呼叫必不可少,但是涉及到很多類和方法的呼叫,使用起來很麻煩,因此對此進行一次封裝很有必要,大大提高了開發效率,下面按照開發流程來展示一下程式碼

封裝類 ImageUtils.java

呼叫相簿:

/**
     * 跳轉到相簿
     */
    public static void openAlbum(Activity activity, int flag) {
        Intent takePictureIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        if (takePictureIntent.resolveActivity(activity.getPackageManager()) != null) {// 相機被解除安裝時不會崩潰
            activity.startActivityForResult(takePictureIntent, flag);
        }
    }


呼叫相機:

/**
     * 跳轉到相機(6.0及以下)
     *
     * @param activity
     */
    public static void openbeforeCamera(Activity activity, Uri uri, int flag) {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        activity.startActivityForResult(takePictureIntent, flag);
    }

/**
     * 7.0相機開啟方式
     * @param activity
     * @param flag
     * @return
     */
    public static void openCamera70(Activity activity,Uri uri, int flag) {
        // 啟用相機
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        // 開啟一個帶有返回值的Activity,請求碼為PHOTO_REQUEST_CAREMA
        activity.startActivityForResult(intent, flag);
    }

儲存圖片的uri路徑:
/**
     * 7.0儲存方式
     * @param activity
     * @param file
     * @return
     */
    public static Uri getSaveUri70(Activity activity,File file){
        //相容android7.0 使用共享檔案的形式
        ContentValues contentValues = new ContentValues(1);
        contentValues.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
        Uri uri = activity.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
        return uri;
    }

    /**
     * 7.0以前儲存方式
     * @param file
     * @return
     */
    public static Uri getSaveUri(File file) {
        Uri uri = Uri.fromFile(file);
        return uri;
    }
封裝類中還有對圖片進行壓縮和裁剪,以及許可權申請,檢查,此處就不粘貼出來了

呼叫方法:

開啟相簿:

mFour.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ImageUtils.openAlbum(MainActivity.this,15);
            }
        });

開啟相機:
mThree.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                file = ImageUtils.createImageFile();
               uri = ImageUtils.getSaveUriAll(MainActivity.this,file);
               Log.d("tag","uri---"+uri);
                ImageUtils.openCamera(MainActivity.this,uri,12);
            }
        });

回撥:
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d("tag","requestCode----"+requestCode);
        //如果返回碼是照相機返回碼,就進行以下處理
        if (requestCode == 12) {
            Log.d("tag","uri-----2222-----"+uri);
            ImageUtils.cropPhoto(this,uri,400,600,13,false);   //裁剪

        }else if (requestCode == 13){
            Log.d("tag","data----"+data);
            Log.d("tag","file------"+file.getAbsolutePath()+"-----uri-----"+uri);
            Glide.with(MainActivity.this).load(uri).into(mImage);
//            mImage.setImageURI(uri);
        }else if (requestCode == 15){
            Log.d("tag","data---------"+data);
            if (data != null){
                Uri contentUri = data.getData();
                ImageUtils.cropPhoto(this,contentUri,400,600,17,true);
            }

        }else if (requestCode == 25){
            Log.d("tag","data----"+data);
            mImage.setImageURI(uri);
        }else if (requestCode == 17){
            Log.d("tag","data----17-----"+data);
            if (data == null) {
                return;
            }
            Bundle bundle = data.getExtras();

            if (bundle != null){
                Bitmap bitmap = bundle.getParcelable("data");
                mImage.setImageBitmap(bitmap);
            }
        }

    }

檢視完整的程式碼,github地址,也有其他的一些封裝類,能用到的可以參考一下