插件
图片选择器
@nativescript/imagepicker
内容
简介
支持单选和多选的图片选择器插件。
- 该插件支持 **iOS8+** 并使用 QBImagePicker cocoapod。
- 对于 **Android**,它使用 Intents 打开库存图片或文件选择器。对于 Android 6 (API 23) 及更高版本,应明确要求读取文件存储的权限。
安装
通过在应用程序根目录中运行以下命令来安装插件。
npm install @nativescript/imagepicker
注意:版本 3.1 包含重大更改
- 当用户选择
Limit AccessLim..
时,iOS 上的新行为将在 iOS 有限权限 中详细说明。
注意:版本 3.0 包含重大更改
- authorize() 现在为 android 和 ios 返回一个
Promise<AuthorizationResult>
。 - 在
present()
返回的结果中,每个result[i].thumbnail
现在都是一个ImageSource
。 result[i].duration
现在被正确地类型化为number
。
注意:版本 2.0 包含重大更改。为了提供有关您的选择更多信息,ImageSource 资产嵌套在响应中,因此您需要更新您的代码以使用 result.asset
而不是 result
作为您图片的 src。
Android 需要的权限
将以下权限添加到 App_Resources/Android/src/main/AndroidManifest.xml
文件
- targetSdkVersion < 33
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
- targetSdkVersion >=33(Android 13+)
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
查看完整的示例 这里。
iOS 需要的权限
在 iOS 上使用该插件需要 NSPhotoLibraryUsageDescription
权限。修改 app/App_Resources/iOS/Info.plist
文件以添加它,如下所示
<key>NSPhotoLibraryUsageDescription</key>
<string>Description text goes here</string>
如果您没有说明为什么要需要此权限,Apple App Store 可能会拒绝您的应用程序。默认消息 Requires access to photo library.
对于 App Store 审核人员来说可能不够。
iOS 有限权限
Apple 在 iOS 14 中引入了 PHAuthorizationStatusLimited
权限状态,在这种状态下,用户指定应用程序只能通过在授权对话框中选择 Limit Access..
选项来访问指定的图片。
在这种情况下,authorise()
将返回一个 AuthorizationResult
,其中 authorized
将为 true
,而 details
将包含 'limited'
。
每次应用程序重新启动并调用 authorize 方法时,如果当前权限为 limited
,系统将提示用户更新图片选择。
要防止此提示,请将以下值添加到您的 App_Resources/iOS/Info.plist
中
<key>PHPhotoLibraryPreventAutomaticLimitedAccessAlert</key>
<true/>
选择图片
要使用该插件选择图片(和/或视频),请按照以下步骤操作
- 导入插件
import * as imagePickerPlugin from '@nativescript/imagepicker'
- 使用选择模式实例化选择器
通过调用插件的 create
函数并传递一个指定媒体资产选择模式(single
或 multiple
)的对象来实例化选择器。
let imagePickerObj: ImagePicker = imagePickerPlugin.create({
mode: 'single',
})
- 选择图片
- 请求权限 通过调用异步
authorize
方法请求访问图片库的权限。 - 显示媒体资产列表 如果授权请求 Promise 已解决(即用户已授予权限),请通过调用
present
方法显示要从中选择的媒体资产列表。 - 处理选择
present
方法将使用选定的媒体资产解析,您可以使用这些资产进行处理和使用。
imagePickerObj
.authorize()
.then((authResult) => {
if (authResult.authorized) {
return imagePickerObj.present().then(function (selection) {
selection.forEach(function (selected) {
this.imageSource = selected.asset
this.type = selected.type
this.filesize = selected.filesize
//etc
})
})
} else {
// process authorization not granted.
}
})
.catch(function (e) {
// process error
})
演示
您可以在以下任一链接的 StackBlitz 上试用该插件
API
ImagePicker 类
提供媒体选择 API 的类。它提供以下方法
方法 | 返回值 | 描述 |
---|---|---|
constructor(options: Options) | ImagePicker | 使用可选的 options 参数实例化 ImagePicker 类。请参阅 选项 |
authorize() | Promise<AuthorizationResult> | 请求所需的权限。在调用 present() 之前调用它。如果授权失败,请考虑通知用户功能下降。如果已授予权限,则返回的 AuthorizationResult 将在其 authorized 属性设置为 true 。 |
present() | Promise<ImagePickerSelection[]> | 显示图片选择器 UI。 |
create(options: Options, hostView: View) | ImagePicker | 创建一个 ImagePicker 类的实例。hostView 参数可以设置为承载图片选择器的视图。旨在从模态页面打开选择器时使用。 |
选项
传递给 create
方法的对象,用于指定媒体选择的特性。
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
mode | string | multiple | 图片选择器的模式。可能的值包括 single 用于单选,multiple 用于多选。 |
minimumNumberOfSelection | number | 0 | 可选:(iOS-only )已选择资产的最小数量。 |
maximumNumberOfSelection | number | 0 | 可选:(iOS-only )已选择资产的最大数量。 |
showsNumberOfSelectedAssets | boolean | true | 可选:(iOS-only )显示已选择资产的数量。 |
prompt | string | undefined | 可选:(iOS-only )在选择资产时显示提示文本。 |
numberOfColumnsInPortrait | number | 4 | 可选:(iOS-only )设置纵向模式下的列数 |
numberOfColumnsInLandscape | number | 7 | 可选:(iOS-only )设置横向模式下的列数。 |
mediaType | ImagePickerMediaType | Any | 可选:要选择的媒体资产类型,可以选择图片/视频/任何类型的资产。 |
copyToAppFolder | string | undefined | 可选:如果传递,将在应用程序文件夹中创建一个新文件夹,并将资产复制到该文件夹。 |
renameFileTo | string | undefined | 可选:如果传递,复制的文件将以您选择的名称命名。如果选择多个,将附加 -index。 |
showAdvanced | boolean | false | 可选:(Android-only )在 Android 上显示内部和可移动存储选项(**警告**:未正式支持)。 |
android | {read_external_storage: string;} | 可选:(Android-only )为 API 级别高于 23 的访问外部存储的权限请求提供理由。 |
ImagePickerMediaType
要选择的媒体资产类型。
Any
=0
,Image
=1
,Video
=2
许可证
Apache 许可证 2.0 版