Andriod相簿 拍照 裁剪總結

2021-09-11 04:53:22 字數 4032 閱讀 7850

進行相簿、拍照、裁剪操作時需要檢查是否申請了如下許可權,注意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的標誌。自已定義 呼叫系統...