国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

安卓選擇相冊(cè)或者相機(jī)圖片并裁剪適配華為小米機(jī)型

2019-11-09 15:00:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

選擇圖片上傳基本是標(biāo)配了,有必要寫(xiě)好個(gè)通用的方法以便使用,以下是一堆代碼,使用的時(shí)候粘貼進(jìn)去就可以了。

基本解決了一些常出現(xiàn)的問(wèn)題:華為手機(jī)適配,6.0權(quán)限申請(qǐng),圖片大小控制。

1、關(guān)于權(quán)限問(wèn)題,我們使用一個(gè)開(kāi)源庫(kù):

dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    compile 'com.mylhyl:acp:1.1.7'}相機(jī)與相冊(cè)都需要讀寫(xiě)權(quán)限,相機(jī)還需要照相權(quán)限。

2、具體代碼,拷貝就能用:

// 拍照成功,讀取相冊(cè)成功,裁減成功PRivate final int ALBUM_OK = 101, CAMERA_OK = 102, CUT_OK = 103;private File bitfile;

private void xiangji() {    Acp.getInstance(mContext).request(new AcpOptions.Builder().setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA).build(), new AcpListener() {        @Override        public void onGranted() {            File dou = new File(Environment.getExternalStorageDirectory(), "dou");            if (!dou.exists()) {                dou.mkdirs();// 2.創(chuàng)建相片的存儲(chǔ)目錄            }            // 定義拍照后存放圖片的文件位置和名稱(chēng),使用完畢后可以方便刪除            String fileName = new SimpleDateFormat("ss-SSS")                    .format(new Date()) + ".jpg";            bitfile = new File(dou, fileName);            // 來(lái)自相機(jī)            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);            // 下面這句指定調(diào)用相機(jī)拍照后的照片存儲(chǔ)的路徑            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(bitfile));            startActivityForResult(cameraIntent, CAMERA_OK);// CAMERA_OK是用作判斷返回結(jié)果的標(biāo)識(shí)        }        @Override        public void onDenied(List<String> list) {            Qiuutil.ShortToast(list.toString() + "權(quán)限拒絕");        }    });}private void xiangce() {    Acp.getInstance(PersonInfoActivity.this).request(new AcpOptions.Builder().setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE).build(), new AcpListener() {        @Override        public void onGranted() {            File dou = new File(Environment.getExternalStorageDirectory(), "dou");            if (!dou.exists()) {                dou.mkdirs();// 2.創(chuàng)建相片的存儲(chǔ)目錄            }            // 定義拍照后存放圖片的文件位置和名稱(chēng),使用完畢后可以方便刪除            String fileName = new SimpleDateFormat("ss-SSS")                    .format(new Date()) + ".jpg";            bitfile = new File(dou, fileName);            // 來(lái)自相冊(cè)            Intent albumIntent = new Intent(Intent.ACTION_PICK, null);            /**             * 下面這句話,與其它方式寫(xiě)是一樣的效果,如果:             * intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);             * intent.setType(""image/*");設(shè)置數(shù)據(jù)類(lèi)型             * 要限制上傳到服務(wù)器的圖片類(lèi)型時(shí)可以直接寫(xiě)如:"image/jpeg 、 image/png等的類(lèi)型"             */            albumIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");            startActivityForResult(albumIntent, ALBUM_OK);        }        @Override        public void onDenied(List<String> list) {            Qiuutil.ShortToast(list.toString() + "權(quán)限拒絕");        }    });}
/** * 裁剪圖片方法實(shí)現(xiàn) * * @param uri  圖片uri * @param type 類(lèi)別:相機(jī),相冊(cè) */public void clipPhoto(Uri uri, int type) {    Intent intent = new Intent("com.android.camera.action.CROP");    intent.setDataAndType(uri, "image/*");    // 下面這個(gè)crop = true是設(shè)置在開(kāi)啟的Intent中設(shè)置顯示的VIEW可裁剪    intent.putExtra("crop", "true");    // aspectX aspectY 是寬高的比例,這里設(shè)置的是正方形(長(zhǎng)寬比為1:1)    intent.putExtra("aspectX", 1);    intent.putExtra("aspectY", 1);    // outputX outputY 是裁剪圖片寬高    intent.putExtra("outputX", 300);    intent.putExtra("outputY", 300);    intent.putExtra("return-data", false);    /**     * 此處做一個(gè)判斷     * 1,相機(jī)取到的照片,我們把它做放到了定義的目錄下。就是file     * 2,相冊(cè)取到的照片,這里注意了,因?yàn)橄鄡?cè)照片本身有一個(gè)位置,我們進(jìn)行了裁剪后,要給一個(gè)裁剪后的位置,     *   不然onActivityResult方法中,data一直是null     */    if (type == CAMERA_OK) {        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);    } else {        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(bitfile));    }    startActivityForResult(intent, CUT_OK);}

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    System.out.println("requestCode = " + requestCode);    switch (requestCode) {        // 如果是直接從相冊(cè)獲取        case ALBUM_OK:            //從相冊(cè)中獲取到圖片了,才執(zhí)行裁剪動(dòng)作            if (data != null) {                clipPhoto(data.getData(), ALBUM_OK);                //setPicToView(data);            }            break;        // 如果是調(diào)用相機(jī)拍照時(shí)        case CAMERA_OK:            // 當(dāng)拍照到照片時(shí)進(jìn)行裁減,否則不執(zhí)行操作            if (bitfile.exists()) {                clipPhoto(Uri.fromFile(bitfile), CAMERA_OK);//開(kāi)始裁減圖片            }            break;        // 取得裁剪后的圖片,這里將其設(shè)置到imageview中        case CUT_OK:            /**             * 非空判斷大家一定要驗(yàn)證,如果不驗(yàn)證的話, 在剪裁之后如果發(fā)現(xiàn)不滿(mǎn)意,             * 要重新裁剪,丟棄 當(dāng)前功能時(shí),會(huì)報(bào)NullException             */            if (data != null) {                try {                    //   Bitmap bm = BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData()));                    //   i1.setImageBitmap(bitmap);                    Bitmap bm = BitmapFactory.decodeFile(bitfile.getAbsolutePath());
//這里獲取了Bitmap,就可以進(jìn)行顯示操作,而一般上傳去網(wǎng)上,可以使用文件路徑bitfile.getAbsolutePath(),// 這不推薦用data進(jìn)行數(shù)據(jù)操作,特別因?yàn)槿A為手機(jī)方法與其他手機(jī)不一致,容易bug。                    mRoundImageView2.setImageBitmap(bm);                    Qiuutil.LogE(Uri.fromFile(bitfile) + ":" + bitfile.getAbsolutePath());                                   } catch (Exception ex) {                    ex.printStackTrace();                }            } else {                Log.e("圖片數(shù)據(jù)獲取Main", "data為空");            }            break;        default:            break;    }    super.onActivityResult(requestCode, resultCode, data);}

調(diào)用時(shí):

mTextView2.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        //xiangji();        xiangce();    }});


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 毕节市| 双牌县| 香港| 宁津县| 吉林市| 广水市| 河曲县| 南开区| 滦南县| 夏邑县| 泸西县| 海丰县| 沂源县| 甘南县| 临潭县| 凉山| 利川市| 永登县| 金门县| 鸡泽县| 安吉县| 酉阳| 南昌县| 廉江市| 永昌县| 伊宁县| 北宁市| 贡觉县| 南和县| 板桥市| 吴桥县| 东光县| 高尔夫| 杂多县| 分宜县| 张掖市| 石台县| 阜新市| 禹州市| 曲水县| 安泽县|