進行相簿、拍照、裁剪操作時需要檢查是否申請了如下許可權,注意6.0的動態許可權申請,並且檢查是否註冊了fileprovider
android:name
="android.permission.read_external_storage"
/>
android:name
="android.permission.write_external_storage"
/>
android:name
="android.support.v4.content.fileprovider4util"
android:authorities
= android:exported
="false"
android:granturipermissions
="true"
>
android:name
="android.support.file_provider_paths"
android:resource
="@xml/util_code_provider_paths"
/>
provider
>
xml/filepaths.xml
<?xml version="1.0" encoding="utf-8"?>
xmlns:android
="">
path="
" name
="external_files"
/>
paths
>
啟動系統相簿
intent intent =
newintent
(intent.action_pick)
;intent.
setdataandtype
(mediastore.images.media.external_content_uri,
"image/*");
intent.
addflags
(intent.flag_grant_read_uri_permission)
;startactivityforresult
(intent, photo_picked_with_data)
;
獲取系統相簿返回的路徑
public
static string getimagepath
(context context, intent data)
elseif(
"com.android.providers.downloads.documents"
.equals
(uri.
getauthority()
))}elseif(
"content"
.equalsignorecase
(uri.
getscheme()
))elseif(
"file"
.equalsignorecase
(uri.
getscheme()
))}else
return imagepath;
}private
static string getimagepath
(context context, uri uri, string selection)
cursor.
close()
;}return path;
}
啟動系統相機,並且傳入**的儲存路徑
file f =
newfile
(path)
;//這裡傳入你自己的**的儲存路徑
intent intent =
newintent
(mediastore.action_image_capture)
;intent.
putextra
(mediastore.extra_output, uriutils.
file2uri
(f))
;startactivityforresult
(intent, camera_with_data)
;public
static uri file2uri
(final file file)
else
}
等到系統相機拍照返回成功時,直接拿傳入的**的儲存路徑即可
啟動系統裁剪,並且傳入要裁剪的檔案路徑和裁剪完成後的的儲存路徑
file f =
newfile
(path)
;//這裡傳入你自己的要裁剪的路徑
//這裡傳入你自己的裁剪完成後的的儲存路徑
uri uri = uriutils.
file2uri
(f)intent intent =
newintent
("com.android.camera.action.crop");
intent.
setdataandtype
(uri,
"image/*");
//需要加上這兩句話 : uri 許可權
intent.
addflags
(intent.flag_grant_read_uri_permission)
;intent.
addflags
(intent.flag_grant_write_uri_permission)
;intent.
putextra
("crop"
,"true");
intent.
putextra
("aspectx",1
);intent.
putextra
("aspecty",1
);intent.
putextra
("outputx"
, icon_size)
;intent.
putextra
("outputy"
, icon_size)
;intent.
putextra
(mediastore.extra_output, uri.
fromfile
(cropfile));
startactivityforresult
(intent, photo_crop_resoult)
;
等到系統裁剪完成返回成功時,直接拿傳入的裁剪完成後的的路徑即可
裁剪用到的引數意義如下所示
附加選項
資料型別
描述crop
string
傳送裁剪訊號,「true」表示啟用裁剪
aspectx
intx方向比例
aspecty
inty方向比例
outputx
int裁剪區的寬
outputy
int裁剪區的高
scale
boolean
是否保留比例
return-data
boolean
是否將裁剪資料保留在bitmap中返回
data
parcelable
需要裁剪的bitmap資料
circlecrop
boolean
是否圓形裁剪區域
mediastore.extra_output
uri裁剪資料輸出位置
讀取相簿 拍照
這兩天在做專案時,做到上傳功能一塊時,碰到兩個問題,乙個是如何獲取所選的路徑,乙個是如何壓縮,在查了一些資料和看了別人寫的後總算折騰出來了,在此記錄一下。首先既然要選擇,我們就先要獲取本地所有的,android已經為我們封裝好了該意圖。12 3451intent intent newintent i...
解決Android拍照儲存在系統相簿不顯示的問題
可能大家都知道我們儲存相簿到android手機的時候,然後去開啟系統相簿找不到我們想要的那張,那是因為我們插入的還沒有更新的緣故,先講解下插入系統相簿的方法吧,很簡單,一句 就能實現 mediastore.images.media.insertimage getcontentresolver mbi...
Android呼叫系統相簿和系統相機拍照
呼叫系統相機拍照 intent new intent mediastore.action image capture startactivityforresult intent,result camara image result camara image activity的標誌。自已定義 呼叫系統...