在react native中訪問(wèn)照片和保存圖片吃引。實(shí)現(xiàn)如下的簡(jiǎn)單效果佛析。
1、效果圖
首先闯参,在react native 中有 CameraRoll 這樣的api瞻鹏,官網(wǎng)參考:
CameraRoll模塊提供了訪問(wèn)本地相冊(cè)的功能。在iOS上使用這個(gè)模塊之前鹿寨,你需要先鏈接RCTCameraRoll庫(kù)(ios)
{
1.\node_modules\react-native\Libraries\CameraRoll下的Xcode項(xiàng)目文件RCTCameraRoll.xcodeproj拖動(dòng)到當(dāng)前Xcode項(xiàng)目的Libraries目錄
2.選中當(dāng)前項(xiàng)目新博,在右邊選擇Build Phases,點(diǎn)擊打開(kāi)子項(xiàng)目Link Binary With Libraris
3.打開(kāi)第一步插入的RCTCameraRoll.xcodeproj脚草,再打開(kāi)它的子目錄Products赫悄,將子目錄下的libRCTCameraRoll.a文件拖到Link Binary With Libraris列表中
4.使用Xcode重新運(yùn)行項(xiàng)目
}
2、訪問(wèn)權(quán)限
在IOS10.之后訪問(wèn)相冊(cè),相機(jī)埂淮,麥克風(fēng)姑隅,數(shù)據(jù),無(wú)線等倔撞,都需要添加權(quán)限讲仰,注意:這里添加權(quán)限的位置是在Xcode工程下,如這是我創(chuàng)建的工程误窖,
info.plist是添加權(quán)限的地方叮盘,注意添加的key關(guān)鍵字不能有偏差,string是添加值霹俺,向用戶說(shuō)明柔吼,這里提供一些其他的:
NSContactsUsageDescription -> 通訊錄
NSMicrophoneUsageDescription -> 麥克風(fēng)
NSPhotoLibraryUsageDescription -> 相冊(cè)
NSCameraUsageDescription -> 相機(jī)
NSLocationAlwaysUsageDescription -> 地理位置
NSLocationWhenInUseUsageDescription -> 地理位置
3、調(diào)用方法?
static saveImageWithTag(tag) 不建議丙唧,我嘗試一下之后愈魏,app建議我使用下面一個(gè)保存的方法。
static saveToCameraRoll(tag, type?)
在Android上,標(biāo)簽必須是當(dāng)?shù)氐膱D像或視頻的URI,比如“文件:/ / / sdcard / img.png”想际。
在iOS,標(biāo)簽可以是任何圖像URI(包括本地培漏、遠(yuǎn)程資產(chǎn)庫(kù)中和base64數(shù)據(jù)URI)或本地視頻文件的URI(遠(yuǎn)程或不支持?jǐn)?shù)據(jù)URI保存視頻在這個(gè)時(shí)候)。如果標(biāo)簽的文件擴(kuò)展名胡本。mov牌柄。mp4,推斷出視頻。否則它將被視為一個(gè)照片侧甫。覆蓋的自動(dòng)選擇,您可以傳遞一個(gè)可選的類型參數(shù),必須“照片”或“視頻”之一珊佣。返回一個(gè)承諾將解決新的URI。
在這里可以是圖片披粟,也可以是視頻文件咒锻,saveToCameraRoll更加全面一些。
static getPhotos(params: object)
返回一個(gè)帶有圖片標(biāo)識(shí)符對(duì)象的Promise守屉。
params:有4個(gè)參數(shù)惑艇。
1.first 數(shù)值 希望獲取多少?gòu)垐D片的信息
2.groupTypes 字符串 默認(rèn)為SavedPhotos [Album All Event Faces Library PhotoStream] 僅支持IOS平臺(tái) 用來(lái)指定獲取圖片或視頻的類型
3.assetType 字符串 默認(rèn)為Photos 表示只獲取圖片 [All Videos]
4.after 字符串 用來(lái)記錄上一次獲取圖片的結(jié)束標(biāo)志 方便可以接著上次的位置繼續(xù)獲取 它的值不能由開(kāi)發(fā)者隨意賦予,而是應(yīng)當(dāng)在上一次獲取圖片后保存其值拇泛。通常滨巴,在Android平臺(tái),一開(kāi)始就給這個(gè)值為null俺叭,但是在IOS平臺(tái)恭取,設(shè)置為null會(huì)拋一個(gè)無(wú)法捕捉的異常,導(dǎo)致紅屏绪颖。
打印data秽荤,在控制臺(tái)顯示的數(shù)據(jù)甜奄,安卓和ios不一樣。
圖片取自東方耀老師在關(guān)于CameraRoll里的說(shuō)明
4窃款、遇到問(wèn)題
在使用saveToCameraRoll 中课兄。
使用了參數(shù),而這個(gè)方法中也說(shuō)明了晨继,使用了字符串烟阐,URI,即圖片的地址紊扬。因此蜒茄,在定義保存兩個(gè)圖片的時(shí)候,我定義了first 餐屎,second
注意這里的地址:是圖片所示檀葛,而不是引用圖片時(shí)候../../imgs/XXX.png。?
5腹缩、github地址:在工程Component下Cammera屿聋。
https://github.com/krislee94/TestComponent
以上在做關(guān)于相冊(cè)的時(shí)候遇到的問(wèn)題,在這里做下筆記藏鹊,如有不足润讥,希望各位大神點(diǎn)出。