極其方便的系統原生圖片選取庫,已適配Android 7.0

本項目由 CSDN_LQR 我的獨立開發。
本庫GitHub地址:github.com/GitLqr/LQRN…javascript

1、簡述

從 Android 7.0 開始,Android SDK 中的 StrictMode 策略禁止開發人員在應用外部公開 file:// URI。具體表現爲,當咱們在應用中使用包含 file:// URI 的 Intent 離開本身的應用時,程序會發生故障。本人根據網上給出的適配教程,成功在圖片選擇及拍照方面適配上了Android 7.0,並本身封裝了一個工具類,爲了從此開發更加快捷,因而本庫就誕生了,若是你願意使用本庫的話,只需調用本庫工具類中提供的3個方法(最少),即可輕鬆完成拍照或圖庫選取圖片的功能需求,且徹底不須要考慮Android系統版本的問題,下面來看看如何使用本庫。java

2、使用

一、依賴與權限

1)依賴

compile 'com.lqr.picselect:library:1.0.1'複製代碼

2)權限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>複製代碼

二、代碼調用

1)建立LQRPhotoSelectUtils

LQRPhotoSelectUtils提供了兩個構造函數,分別是:android

// 能夠自定義是否開啓圖片剪切功能(沒法設置剪切大小,默認800*480)
public LQRPhotoSelectUtils(Activity activity, PhotoSelectListener listener, boolean shouldCrop)
// 默認開啓圖片剪切功能,能夠指定剪切大小
public LQRPhotoSelectUtils(Activity activity, PhotoSelectListener listener, int aspectX, int aspectY, int outputX, int outputY) 複製代碼

這裏有兩個要說明的:git

  1. 部分國產機沒法使用圖片剪切功能,例如華爲TAG-AL00就閹割了圖片剪切,但本人親測小米3就能夠進行圖片剪切,這是系統優化差別形成的,不是本庫的問題!!!
  2. 此外,就算能夠進行圖片剪切,也不必定能夠固定圖片大小,親測小米3與堅果pro沒法固定剪切圖片的大小,又由於手頭上沒有「谷歌親兒子」,因此無法判定是否是本庫代碼問題,故在此,本人建議使用第一個構造方法。

使用第一個構造方法建立LQRPhotoSelectUtils對象示例以下:github

// 建立LQRPhotoSelectUtils(一個Activity對應一個LQRPhotoSelectUtils)
mLqrPhotoSelectUtils = new LQRPhotoSelectUtils(this, new LQRPhotoSelectUtils.PhotoSelectListener() {
    @Override
    public void onFinish(File outputFile, Uri outputUri) {
        // 當拍照或從圖庫選取圖片成功後回調
        mTvPath.setText(outputFile.getAbsolutePath());
        mTvUri.setText(outputUri.toString());
        Glide.with(MainActivity.this).load(outputUri).into(mIvPic);
    }
}, true);複製代碼

若是你不須要圖片剪切功能,只須要將構造方法的第3個參數傳入false便可。app

2)關聯onActivityResult()

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 在Activity中的onActivityResult()方法裏與LQRPhotoSelectUtils關聯
    mLqrPhotoSelectUtils.attachToActivityForResult(requestCode, resultCode, data);
}複製代碼

3)調用拍照或從圖庫選取圖片方法

// 調用相機進行拍照
mLqrPhotoSelectUtils.takePhoto();
// 調用圖庫選取圖片
mLqrPhotoSelectUtils.selectPhoto();複製代碼

4)其餘設置

// 設置FileProvider的主機名
mLqrPhotoSelectUtils.setAuthorities();
// 修改圖片的存儲路徑
mLqrPhotoSelectUtils.setImgPath();複製代碼

注意:ide

若是你app的build.gradle中,defaultConfig{}的applicationId對應的值不是應用包名的話就須要調用setAuthorities()方法;也設置FileProvider的主機名,這是爲了適配Android 7.0。取值是applicationId對應的值+".fileprovider"。若applicationId對應的值是應用包名的話則不需理會。函數

四、效果

若有問題請參考本庫的Demo,相信問題並不大,下面看下Demo的運行效果:工具

相關文章
相關標籤/搜索