[Android] 獲取照片(相機,相冊)

簡述

作為一個android小碼農,每次開發一個APP,都需要根據需求在網上找一些輪子,免得自己重復制作,畢竟android發展也算成熟了,網上的輪子一大推,哈哈哈...

不過雖然網上輪子多,但是如果每個APP都需要重新再網上找,就顯得麻煩了。

比如說android的獲取照片功能,以前每次都需要去網上重新找并且下載最新jar。

所以,自己就弄了個開源庫,以后用到就可以直接使用了,哈哈哈~~~

當然,此開源庫,主要還是參考了網上其他大神寫的庫來,自己封裝的。

此篇文章主要是寫使用教程,如果需要了解源碼的可以

點擊這里,到我的github項目中查看

下載JAR

takephoto.jar

功能

  • 相機獲取圖片
  • 相冊獲取圖片
  • 剪切
  • 壓縮

注意

本庫沒有適配android 6.0 以上動態權限,所以如果需要使用此庫前必須確保自己項目已經獲取到以下三個權限

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

至于6.0動態權限的獲取可以參考其他開源庫,自己可以在github上查找,我就不列表出了,當然有時間,我還是會自己再封裝android 6.0以上動態權限庫的,敬請期待吧

用法

    1. 打開相機()
public void onCamera(View view) {
    mTakeParam = new TakeParam(this);
    startActivityForResult(TakeHelper.buildCameraIntent(mTakeParam), mTakeParam.REQUEST_CODE_CAMERA);
}
    1. 打開相機
public void onAlbum(View view) {
    mTakeParam = new TakeParam(this);
    startActivityForResult(TakeHelper.buildAlbumIntent(), mTakeParam.REQUEST_CODE_ALBUM);
}
    1. 剪切設置(默認為 true)
 mTakeParam.isCrop = true;
    1. 壓縮設置(默認為 true)
 mTakeParam.isCompress = true;
    1. 處理回調
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    TakeHelper.handleResult(this, mTakeParam, requestCode, resultCode, data);
}
    1. 實現ITakePhotoListener接口
public class MainActivity extends AppCompatActivity implements ITakePhotoListener {

    private TakeParam mTakeParam;

    .
    ..
    ...

    @Override
    public void onComplete(Uri uri) {
        //獲取到圖片Uri,顯示在ImageView
        mImageView.setImageURI(uri);
    }

    @Override
    public void onCancel() {
        //取消選擇
    }

    @Override
    public void onFailed() {
        //失敗回調
        Toast.makeText(this, "獲取圖片失敗", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void startCropIntent(Intent intent) {
        //啟動剪切功能
        startActivityForResult(intent, mParam.REQUEST_CODE_CROP);
    }
    1. 最后,最好選擇在使用完畢時,選擇清理的緩存的照片,如下:
    @Override
    public void onComplete(Uri uri) {
        mImageView.setImageURI(uri);
        //TakeHelper.clearFile(this);
    }

    //或者

    @Override
    protected void onDestroy() {
        TakeHelper.clearFile(this);
        super.onDestroy();
    }

適配android 7.0

    1. 方法1 -- 在Application類種添加以下代碼
public class App extends Application  {

    @Override
    public void onCreate() {
        super.onCreate();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
        }
    }
}
    1. 方法二 (相對麻煩)
    • 2.1 在AndroidManifest注冊provider
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
    </provider>
    • 2.2 在項目資源文件下創建xml 目錄,并且在xml目錄下創建一個文件,文件名需要和上一步resource屬性的文件名相對應,如:provider_paths,如下圖:
20170812223649.png

在上圖的五個標簽(files-path、cache-path、external-path、external-files-pathexternal-cache-path)可以根據自己緩存文件路徑選擇開啟哪幾個

其他

庫里面還有一些其他屬性可以自定,詳細情況可以查看
TakeParam

感謝:

本庫的設計模式主要是參考了已經停止維護的PhotoCropper

最后如果喜歡我的這篇文章的話,可以點擊收藏或者關注我,哈哈哈...

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,711評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,818評論 18 139
  • 一:這個組件我自己研究了好久,雖然感覺代碼邏輯有點亂和復雜,但好在也是完成了,所以打算趁著還有記憶的時候記錄下來,...
    壘虛閱讀 789評論 0 0
  • 昏日殘霞樹已蒼,半塘靜水倚新妝。 滿園春色胭脂醉,不勝杯中琥珀光。 煙莫舉,酒稍狂。 珮搖明月洗涼漿。 情知夢里尋...
    屏風隔斷閱讀 264評論 0 1
  • 寵若不驚 看庭前花開花謝 去無留意 望天上云卷云舒 閑睱時光 若是能在葡萄架下 喝上一杯陳年葡萄酒 再美美的睡一覺...
    丶足跡閱讀 321評論 0 0