需求: 調用系統照相機進行拍照,並且保存到系統相冊,調用系統相冊的時候能看到
系統相冊的路徑:String cameraPath=
Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_DCIM+File.separator+"Camera"+File.separator;
private Uri photoUri;
private String fileName;
private File photoFile;
1.這樣的話你可以去我們保存的路徑下查看下,是不是已經存在了。
但是這樣,你直接調用系統的相冊,或者通過查詢數據庫來查看圖片,咦?為什么沒有呢!別着急到這里后還沒有完呢,如果想讓系統知道我們拍照了,我們還需要做一步操作就是通知數據庫(更新指定的url),讓圖片數據庫更行,知道我們拍了新的照片。(注:這個時候的圖片是沒有縮略圖的,有的系統會在一段時間后自動生成縮略圖)
通知數據庫更新指定的url
下面這個是通知更新整個內存卡的,在早期的安卓版本中會使用到,更新的范圍大,如果內存卡中有很多數據,會非常的慢(注:現在已經很少用)。
這樣就看你在什么地方需要通知了,我在項目中是在返回的時候發廣播通知系統圖庫更新的。
不同的系統版本通知的不一樣(我文章中通知的這個范圍在小米4和三星galaxys4 都沒有問題,可以再系統圖庫中看到,但是另一款三星note 的系統圖庫中就沒有看到。如果有更好的解決辦法,煩勞小伙伴告知了,不甚感激!)
2.另外還有一種方法可以把圖片插入到系統圖庫中。
但是這種方法,並不能指定保存的路徑,而且系統會根據自己的規則來給圖片進行命名。執行這個方法,你的內存中就會有兩個一樣的圖片了,一個是你自己保存的路徑,一個是執行這個方法,系統自動為你保存的一個圖片。通過查看源碼我們會發現,這個方法還會為圖片生成縮略圖。
下面我貼出這個方法的源碼,可以清楚的看到在這個方法中對圖片做了壓縮和生成縮略圖的處理。
3.對於保存拍照后的圖片,我在網上看到有的小伙伴這樣寫,但是我這樣寫會報錯,不知道你們遇到過沒,知道的小伙伴告訴下哈,感謝 感謝
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");
// ...做保存圖片的操作...
}